2017-11-10 2 views
1

テストデータベースをシードするのとまったく同じ方法で開発データベースをシードしたいと思います。私は、titleの属性を持つPersonalTitleモデルを持っています。 titleは、Mr,Mrs,Miss,MsおよびDrのような値を有する。他のいくつかのモデルがありますbelong_toPersonalTitle。例レールテストフィクスチャで私の開発データベースをシードする方法

class Administrator < ActiveRecord::Base 
    belongs_to :personal_title 
end 

class Worker < ActiveRecord::Base 
    belongs_to :personal_title 
end 

class Client < ActiveRecord::Base 
    belongs_to :personal_title 
end 

...など

personal_titles.ymlでテスト・データベースは、私が

personal_title_mr: 
    title: Mr 
personal_title_mrs: 
    title: Mrs 
personal_title_ms: 
    title: Ms 
personal_title_miss: 
    title: Miss 
personal_title_dr: 
    title: Dr 

を持っているし、私はadministrators.ymlに個人的なタイトルを使用したい場合は、私が持っている種子

administrator_john_smith: 
    personal_title: personal_title_mr 

したがって、名前付き参照を使用してdministratorsテーブルにpersonal_title_idを追加します。私が開発データベースをシードすると、私はそれを行うことができません。私は、スタックオーバーフローの上に見つけたものからは、開発のために、personal_titles.yml

- title: Mr 
- title: Mrs 
- title: Ms 
- title: Miss 
- title: Dr 

、このように見えることがあるので、個人的なタイトルが開発データベースを投入するために使用されているYMLファイルで指定することはできません。何故なの? Railsは、テスト・データベースがシードされたときに名前参照を使用するため、名前参照の使用方法を認識しています。

私はRailsの4.10とRuby 1.9.3

更新

私はdb\seeds\seed_all.rbと私の開発データベースを播種していますを使用しています。このファイルの中に私が持っています

seed_file = Rails.root.join('db', 'seeds', 'personal_titles.yml') 
personal_titles = YAML::load_file(seed_file) 
PersonalTitle.create!(personal_titles) 

私はfakerについて知っていて、私はそれのための種子ファイルを持っています。上のケースでは、私が理解している既知のデータが必要ですが、それは変わらず、私は関連を完全に制御できます。

+0

シードやフィクスチャーと同じように(私は異なることを考えていますが)相互作用するため、問題は完全には解決しません。いくつかの共通のアイデアで私の答えを残しました – AntonTkachov

+0

'rake db:fixtures:load'を試しましたか? – MrYoshiji

+0

いいえ、私は@MrYoshijiを持っていませんでしたが、私はちょうどやりました。正式な回答を追加した場合、それを正しいものとしてマークします – RamJet

答えて

1

seeds/users.seeds.rbなどの個別のファイルに種を分割する私の最新のプロジェクト、seeds/categories.seeds.rb、のいずれかでseedbankを使用:

rake db:fixtures:load 

デフォルトでは、この環境のデータベースにフィクスチャがロードされるように、レールenvが開発されます。

0

あなたのデータベースにシードするには、通常のルビコードだけを受け入れるdb/seeds.rbを使います。テストのデータベースでは、通常fixtures(私はあなたがこのアプローチを使用していると思います)またはfactory_girlと入力されますが、私は同じようにdevのシードの同様のケースに直面していない。

シードファイルが複雑で長い場合は、シードデータベースのいくつかの宝石を見てください。私は、あなたは、次のすくいコマンドを使用して、データベース内の備品の負荷を引き起こすことができるなど

関連する問題