Chaque fois que des données de test sont nécessaires pendant le développement, il est difficile de frapper rails c
ou de créer une action pour créer un enregistrement.
Par conséquent, nous allons introduire une graine qui facilite la création d'enregistrements prédéfinis, qu'ils soient 50 ou 1000, simplement en appuyant sur une commande.
Si vous recherchez uniquement avec des rails seed, cela sera généralement écrit directement dans db / seedss.rb, mais s'il y a beaucoup de modèles, ce sera difficile à gérer. Par conséquent, divisez le fichier et créez-en un format appelé par require à partir de db / seeds.rb.
Cela facilite la gestion lors de l'ajout ou de la suppression, et seed peut également être exécuté en spécifiant un fichier, ce qui est pratique.
$ 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
En espérant que le nombre de modèles à ensemencer augmentera à l'avenir, nous lirons les fichiers externes en les ajoutant à une variable appelée seed_models. En analysant le répertoire, vous pouvez faire en sorte que vous n'ayez pas à changer db / seeds.rb à chaque fois, mais il y aura des dépendances telles que l'enregistrement du modèle utilisateur à créer à l'avenir doit exister avant le modèle de publication. Donc, je l'ai écrit pour pouvoir jouer manuellement avec l'ordre d'exécution.
Le contenu de post_seeds.rb exécute simplement Post.create!
20 fois.
En ajoutant !
, Une exception sera levée lorsque l'enregistrement ne peut pas être effectué en raison d'une erreur de validation, donc si vous le remarquez, vous pouvez empêcher la situation où l'enregistrement n'a pas été généré.
$ rails db:reset
$ rails db:seed
$ rails c
[1] pry(main)> Post.count
(1.1ms) SELECT COUNT(*) FROM "posts"
=> 20
En réinitialisant db: reset, toutes les tables sont supprimées et régénérées. Cela exécutera une graine qui ne fonctionnera que lorsqu'il y a un enregistrement. Et par db: seed, vous pouvez voir que 20 enregistrements ont été ajoutés.
C'est bien d'avoir un disque, mais tous les sujets sont hoge et le corps est fuga. À ce rythme, si vous l'obtenez de l'API pour une raison quelconque, il sera difficile de le remarquer même si le même enregistrement est confus. Cependant, il est difficile de créer une chaîne de caractères complètement aléatoire à chaque fois, donc Faker est utile.
Mettons-le pour le moment.
Gemfile
...
group :development, :test do
...
+ "faker"
end
...
$ bundle
Essayons-le.
$ 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"
De cette manière, il renvoie automatiquement une nomenclature et des phrases aléatoires à chaque exécution. Vérifiez Check on Github pour les termes définis par défaut. Non seulement les noms, les animaux, les adresses et les numéros de téléphone des gens, mais aussi des films, des dessins animés, des jeux, des drames, de la musique. Il y a même des noms de Pokémon et un fruit du diable ONE PIECE.
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>,
Vous pouvez voir que des enregistrements aléatoires de sujet et de corps ont été créés.
Il n'est pas pratique de créer un site japonais s'il est en anglais même si vous le mettez, alors localisons-le. Puisque db: seed est exécuté dans l'environnement de développement, essayons de japonaisiser Faker dans l'environnement de développement.
config/environments/development.rb
Rails.application.configure do
...
+ Faker::Config.locale = "ja"
end
Si vous n'aimez pas la japonaisisation tout le temps, vous pouvez mettre Faker :: Config.locale =" ja "
dans db / seeds / post_seeds.rb.
Puis exécutez à nouveau la graine.
$ 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: "Aller",
body: "Lieutenant-général de police. Meishibokin Katamichi. Traditionnel 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: "français",
body: "~ Système la semaine dernière. Je rentre à la maison. Prix élevé au magasin.",
created_at: Sun, 06 Sep 2020 15:45:27 UTC +00:00,
updated_at: Sun, 06 Sep 2020 15:45:27 UTC +00:00>,
Il a été traduit avec succès en japonais. Vous pouvez vérifier la version japonaise sur Github (https://github.com/faker-ruby/faker/blob/master/lib/locales/ja.yml). Inversement, ce qui n'est pas là est toujours en anglais.
→ Introduction du sérialiseur # 9 pour créer une API de tableau d'affichage avec certification et autorisation dans Rails 6 [Vers la table de sérialisation]
Recommended Posts