如何使用rails测试夹具为我的开发数据库设定种子

时间:2017-11-10 14:42:59

标签: ruby-on-rails

我想以与种子测试数据库完全相同的方式为我的开发数据库提供种子。我的PersonalTitle模型有一个属性titletitle的值包括MrMrsMissMsDrbelong_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,我有一个种子文件。在上面的例子中,我想知道我理解的已知数据,这些数据不会改变,我可以完全控制关联。

2 个答案:

答案 0 :(得分:2)

您可以使用以下rake命令触发数据库中灯具的加载:

rake db:fixtures:load

默认情况下,rails env将进行开发,因此灯具将加载到此环境的数据库中。

答案 1 :(得分:0)

要为数据库设定种子,我会使用db/seeds.rb,它只接受通常的ruby代码。在测试中,数据库通常会填充fixtures(我认为您正在使用此方法)或factory_girl,但我没有遇到类似的播种开发类似情况。

如果您有复杂且长的种子文件,请查看种子数据库的一些宝石。我在我最近的一个项目中使用seedbank将种子拆分为单独的文件,例如seeds/users.seeds.rbseeds/categories.seeds.rb