Cześć w dzisiejszym odcinku chciałbym pokazać wam, jak zapełnić naszą developerską bazę danymi. Jest za to odpowiedzialny task db:seed i pliks seeds.rb.

Jest to bardzo przydatne narzędzie. Gdy pracujemy w kilka osób i po instalacji aplikacji chcemy by jakieś dane w niej były. Szczególnie gdy są to bardziej złożone dane. Możemy mieć użytkowników z różnymi rolami, jakieś domyślne ustawienia, treści, itp

Z punktu widzenia bloga, to może być administrator, czytelnik. Kilka postów i kilka komentarzy do tego.

Kod który tutaj używam pochodzi z pierwszego filmu który nagrałem.

Zajrzyjmy do pliku db/seeds.rb

domyślnie jest tam zakomentowany przykładowy kod

# This file should contain all the record creation needed to seed the database with its default values.
# The data can then be loaded with the bin/rails db:seed command (or created alongside the database with db:setup).
#
# Examples:
#
#   movies = Movie.create([{ name: 'Star Wars' }, { name: 'Lord of the Rings' }])
#   Character.create(name: 'Luke', movie: movies.first)

my musimy zrobić coś podobnego

na pierwszy ogień stwórzmy naszego autora bloga

autor = User.create(email: "kontakt@rubypopolsku.pl", password: "foobar2000", author: true)

po za autorem, utwórzmy jeszcze komentującego

komentujący = User.create(email: "foo@bar.dev", password: "Qwerty1", author: false)

zanim utworzymy posty potrzebujemy kategorie

kategoria = Category.create(name: "Kategoria testowa")

skoro mamy użytkowników to możemy utworzyć kilka postów

10.times do
	Post.create(title: "Post testowy", body: "tresc testowa", category: kategoria, user: autor)
end

ale niech każdy post ma też komentarze

wewnątrz tej pętli dodajmy jeszcze ich tworzenie


2.times do
  Comment.create(body: "komentarz", post: post, user: User.all.sample)end

w ten sposób autorem komentarza będzie losowy użytkownik

mamy już wszystkie potrzebne dane

przejdźmy do terminala

odpalmy rails db:seed

w ten sposób zapełnimy naszą bazę danych danymi

włączmy rails server

przejdźmy na localhost:3000

jak widzicie są nasze dane

ale

wszystkie treści wyglądają tak samo

możemy to trochę urozmaicić korzystając z gema “faker”

https://github.com/faker-ruby/faker

dodajmy go do naszego gemila

gem 'faker'

pamiętajcie o bundle install

faker ma bardzo dużo gotowych rozwiązań, praktycznie na każdy rodzaj pola

i tak zamiast komentarza możemy zmienić to na cytat z przyjaciół

Comment.create(body: Faker::TvShows::Friends.quote, post: post, user: User.all.sample)

a nasze posty, na fragmenty z twórczości lovecrafta

post = Post.create(title: Faker::Books::Lovecraft.sentence, body: Faker::Books::Lovecraft.paragraph(sentence_count: 5), category: kategoria, user: autor)

na koniec zmieńmy jeszcze kategorie, niech będą dwie i niech się lepiej nazywają

2.times do
  Category.create(name: Faker::Books::Lovecraft.fhtagn)
end

a kategoria do posta też niech przypisuje się losowo

post = Post.create(title: Faker::Books::Lovecraft.sentence, body: Faker::Books::Lovecraft.paragraph(sentence_count: 5), category: Category.all.sample, user: autor)

a na koniec sformatujmy jeszcze ten kod by czytelniej wyglądał

autor = User.create(email: "kontakt@rubypopolsku.pl", password: "foobar2000", author: true)

komentujący = User.create(email: "foo@bar.dev", password: "Qwerty1", author: false)

2.times do
  Category.create(name: Faker::Books::Lovecraft.fhtagn)
end

10.times do
	Post.create(
    title: Faker::Books::Lovecraft.sentence,
    body: Faker::Books::Lovecraft.paragraph(sentence_count: 5),
    category: Category.all.sample,
    user: autor
  ).tap do |post|
    3.times do
      Comment.create(
        body: Faker::TvShows::Friends.quote,
        post: post,
        user: User.all.sample
      )
    end
  end
end

jeżeli jeszcze raz odpalicie rails db:seed to dane z naszego pliku się dopiszą, co zależnie od walidacji może powodować problemy

na wszelki wypadek zresetuję bazę danych

rails db:reset

odpalę jeszcze raz migracje

rails db:migrate

i na koniec nasze seedy

rails db:seed

teraz jak włączę serwer (rails server)

to na http://localhost:3000 mamy bardziej przejrzyste dane

Na dzisiaj to już tyle

Dziękuje za oglądanie. Miłego kodowania!

Kod aplikacji