我希望以与我的测试数据库完全相同的方式为我的开发数据库添加种子。我有一个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和Ruby1.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的事,我有一份种子档案。在上面的例子中,我希望知道我理解的数据,这不会改变,并且我对关联有完全的控制。
发布于 2017-11-10 16:04:59
您可以使用以下rake命令触发数据库中的固定装置的负载:
rake db:fixtures:load默认情况下,rails env将进行开发,因此将在此环境的数据库中加载固定装置。
发布于 2017-11-10 14:50:01
要为您的数据库添加种子,我将使用db/seeds.rb,它只接受通常的红宝石代码。在测试中,数据库通常使用fixtures (我认为您正在使用这种方法)或factory_girl填充,但是我还没有以同样的方式处理过类似的seeding。
如果您有复杂而长的种子文件,请查看种子数据库中的一些宝石。我在最近的一个项目中使用seedbank将种子分割成单独的文件,如seeds/users.seeds.rb、seeds/categories.seeds.rb等。
https://stackoverflow.com/questions/47225278
复制相似问题