【问题标题】:How to seed my development database with rails test fixtures如何使用 Rails 测试装置播种我的开发数据库
【发布时间】:2017-11-10 14:42:58
【问题描述】:

我想以与为测试数据库播种完全相同的方式播种我的开发数据库。我有一个PersonalTitle 模型,它有一个属性titletitle 的值类似于 MrMrsMissMsDr。还有其他几个型号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

所以我可以使用命名引用来使用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,我有一个种子文件。在上述情况下,我想要我理解的已知数据,这些数据不会改变,并且我可以完全控制关联。

【问题讨论】:

  • 我没有完全理解您的问题,因为您与种子和固定装置的交互方式相同(而我考虑的是不同的事情),但环境通常不会影响任何过程以使其如此不同。留下我的一些共同想法的答案
  • 你试过rake db:fixtures:load吗?
  • 不,我没有@MrYoshiji,但我刚刚做到了,这正是我想要的。如果您添加正式答案,我会将其标记为正确

标签: ruby-on-rails


【解决方案1】:

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

rake db:fixtures:load

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

【讨论】:

    【解决方案2】:

    要为您的数据库播种,我会选择db/seeds.rb,它只接受普通的 ruby​​ 代码。在测试中,数据库通常填充有fixtures(我认为您正在使用这种方法)或factory_girl,但我还没有遇到过类似的以同样方式播种开发人员的情况。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-08
      • 2015-03-10
      • 2020-05-02
      相关资源
      最近更新 更多