Wenn während der Entwicklung Testdaten benötigt werden, ist es schwierig, auf "Rails C" zu klicken oder eine Aktion zum Erstellen eines Datensatzes zu erstellen. Daher werden wir einen Startwert einführen, der es einfach macht, voreingestellte Datensätze (50 oder 1000) zu erstellen, indem Sie einfach einen Befehl drücken.
Wenn Sie nur mit Rails Seed googeln, wird dies normalerweise direkt in db / seeds.rb geschrieben. Wenn es jedoch viele Modelle gibt, ist die Verwaltung schwierig. Teilen Sie daher die Datei und machen Sie sie zu einem Format, das von require aus db / seeds.rb aufgerufen wird.
Dies erleichtert die Verwaltung beim Hinzufügen oder Löschen, und Seed kann auch durch Angabe einer Datei ausgeführt werden, was praktisch ist.
$ mkdir db/seeds
$ touch db/seeds/post_seeds.rb
db/seeds.rb
# frozen_string_literal: true
seed_models = %i[post]
seed_models.each do |model|
require "./db/seeds/#{model}_seeds"
end
db/seeds/post_seeds.rb
# frozen_string_literal: true
unless Post.exists?
20.times do
Post.create!(subject: "hoge", body: "fuga")
end
end
In der Erwartung, dass die Anzahl der zu setzenden Modelle in Zukunft zunehmen wird, werden wir externe Dateien lesen, indem wir sie einer Variablen namens seed_models hinzufügen. Durch Scannen des Verzeichnisses können Sie festlegen, dass Sie db / seeds.rb nicht jedes Mal ändern müssen. Es gibt jedoch Abhängigkeiten, z. B. muss der zukünftig zu erstellende Benutzermodelldatensatz vor dem Postmodell vorhanden sein. Also habe ich es geschrieben, damit ich manuell mit der Ausführungsreihenfolge spielen kann.
Der Inhalt von post_seeds.rb wird einfach 20 Mal "Post.create!" Ausgeführt. Durch Hinzufügen von "!" Wird eine Ausnahme ausgelöst, wenn die Registrierung aufgrund eines Validierungsfehlers nicht durchgeführt werden kann. Wenn Sie dies bemerken, können Sie die Situation verhindern, in der der Datensatz nicht generiert wurde.
$ rails db:reset
$ rails db:seed
$ rails c
[1] pry(main)> Post.count
(1.1ms) SELECT COUNT(*) FROM "posts"
=> 20
Durch Zurücksetzen von db: reset werden alle Tabellen gelöscht und neu generiert. Dadurch wird ein Startwert ausgeführt, der nur funktioniert, wenn ein Datensatz vorhanden ist. Und mit db: seed können Sie sehen, dass 20 Datensätze hinzugefügt wurden.
Es ist schön, eine Aufzeichnung zu haben, aber alle Themen sind hoge und der Körper ist fuga. Bei dieser Rate ist es schwierig, dies zu bemerken, wenn Sie es aus irgendeinem Grund von der API erhalten, selbst wenn derselbe Datensatz verwirrt ist. Es ist jedoch mühsam, jedes Mal eine völlig zufällige Zeichenfolge zu erstellen, daher ist Faker nützlich.
Lassen Sie es uns vorerst einfügen.
Gemfile
...
group :development, :test do
...
+ "faker"
end
...
$ bundle
Probieren wir es aus.
$ rails c
[1] pry(main)> Faker::Name.unique.name
=> "Miss Porter Kovacek"
[2] pry(main)> Faker::Name.name
=> "Felicita Durgan"
[3] pry(main)> Faker::Name.name
=> "Yong Weissnat"
[4] pry(main)> Faker::Name.name
=> "Sandie Oberbrunner"
Auf diese Weise werden bei jeder Ausführung automatisch zufällige Nomenklaturen und Sätze zurückgegeben. Überprüfen Sie Check on Github auf die standardmäßig definierten Wörter. Nicht nur die Namen, Tiere, Adressen und Telefonnummern von Menschen, sondern auch Filme, Cartoons, Spiele, Dramen und Musik. Es gibt sogar Pokemon-Namen und ONE PIECE Devil Fruit.
db/seeds/post_seeds.rb
# frozen_string_literal: true
unless Post.exists?
20.times do
- Post.create!(subject: "hoge", body: "fuga")
+ Post.create!(subject: Faker::Lorem.word, body: Faker::Lorem.paragraph)
end
end
$ db:reset
$ db:seed
$ rails c
[1] pry(main)> Post.all
Post Load (0.4ms) SELECT "posts".* FROM "posts"
=> [#<Post:0x000000000636cbe8
id: 1,
subject: "quos",
body: "Earum numquam qui. Impedit autem molestias. Ipsum adipisci eos.",
created_at: Sun, 06 Sep 2020 15:36:27 UTC +00:00,
updated_at: Sun, 06 Sep 2020 15:36:27 UTC +00:00>,
#<Post:0x00000000063b5be0
id: 2,
subject: "vero",
body:
"Impedit distinctio saepe. Adipisci cupiditate officiis. Vel et deleniti.",
created_at: Sun, 06 Sep 2020 15:36:27 UTC +00:00,
updated_at: Sun, 06 Sep 2020 15:36:27 UTC +00:00>,
Sie können sehen, dass zufällige Betreff- und Körperdatensätze erstellt wurden.
Es ist unpraktisch, eine japanische Site zu erstellen, wenn sie auf Englisch ist, obwohl Sie sie eingegeben haben. Lassen Sie uns sie also lokalisieren. Da db: seed in der Entwicklungsumgebung ausgeführt wird, versuchen wir, Faker in der Entwicklungsumgebung zu japanisieren.
config/environments/development.rb
Rails.application.configure do
...
+ Faker::Config.locale = "ja"
end
Wenn Sie Japanisierung nicht immer mögen, können Sie Faker :: Config.locale =" ja "
in db / seed / post_seeds.rb einfügen.
Dann lassen Sie den Samen erneut laufen.
$ rails db:reset
$ rails db:seed
$ rails c
[1] pry(main)> Post.all
Post Load (0.3ms) SELECT "posts".* FROM "posts"
=> [#<Post:0x0000000006480b88
id: 1,
subject: "Gehen",
body: "Generalleutnant Polizist. Meishibokin Katamichi. Traditionelles Tokugawa super ~.",
created_at: Sun, 06 Sep 2020 15:45:27 UTC +00:00,
updated_at: Sun, 06 Sep 2020 15:45:27 UTC +00:00>,
#<Post:0x00000000064fb928
id: 2,
subject: "Französisch",
body: "~ System letzte Woche. Ich gehe nach Hause. Hoher Preis im Laden.",
created_at: Sun, 06 Sep 2020 15:45:27 UTC +00:00,
updated_at: Sun, 06 Sep 2020 15:45:27 UTC +00:00>,
Es wurde erfolgreich ins Japanische übersetzt. Sie können die japanische Version auf Github überprüfen (https://github.com/faker-ruby/faker/blob/master/lib/locales/ja.yml). Umgekehrt ist das, was nicht drin ist, immer noch auf Englisch.
→ Einführung des Serializers Nr. 9 zum Erstellen einer Bulletin Board-API mit Zertifizierung und Autorisierung in Rails 6 [Zur Serialisierungstabelle]
Recommended Posts