我想以与种子测试数据库完全相同的方式为我的开发数据库提供种子。我的PersonalTitle
模型有一个属性title
。 title
的值包括Mr
,Mrs
,Miss
,Ms
和Dr
。 belong_to
PersonalTitle
还有其他几种模型。例如
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
因此,我可以使用命名引用使用personal_title_id填充administrators表。如果我开发我的开发数据库,我就不能这样做。从我在堆栈溢出中发现的,为了开发,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 :(得分:2)
您可以使用以下rake命令触发数据库中灯具的加载:
rake db:fixtures:load
默认情况下,rails env将进行开发,因此灯具将加载到此环境的数据库中。
答案 1 :(得分:0)
要为数据库设定种子,我会使用db/seeds.rb
,它只接受通常的ruby代码。在测试中,数据库通常会填充fixtures
(我认为您正在使用此方法)或factory_girl
,但我没有遇到类似的播种开发类似情况。
如果您有复杂且长的种子文件,请查看种子数据库的一些宝石。我在我最近的一个项目中使用seedbank
将种子拆分为单独的文件,例如seeds/users.seeds.rb
,seeds/categories.seeds.rb
等