0

我必须为 Rails 应用程序准备大量的种子数据。根据我有限的经验,我知道两种方法可以做到这一点,但想知道哪种方法最灵活。

一,我可以用 Rails 来做,只需按照在 seed.rb 文件中使用的方式准备种子数据

User.create!( name: "John" ) 

或者,我可以创建数据的 json 文档。例如,我知道 Mongodb 可以让您将 json 文档直接导入数据库。我不确定其他数据库...

我突然想到 json 文档可能是最灵活的,因为我想你也可以使用正则表达式脚本将 json 转换成这样的东西 User.create!( name: "John" )

但是,我想知道是否还有其他我应该考虑的问题......

4

2 回答 2

2

我是 StackOverflow 新手,所以无法回复上面的评论。

我一直在尝试做类似的事情,我遇到了批量分配保护问题。我在研究中遇到的一个想法是使用:

without_protection: true

我发现这可以使用 rails 3.2.3 例如:

json = ActiveSupport::JSON.decode(File.read('db/seeds/data.json'))
json.each do |a|
     Country.create!(a['data'], without_protection: true)
end

请参阅http://snippets.aktagon.com/snippets/401-How-to-seed-your-database-with-JSON-YAML-data-in-Rails

于 2013-03-10T10:24:27.673 回答
0

要考虑的一个问题是您不能总是通过构造函数传递所有参数。考虑一下:

class User
  include Mongoid::Document

  field :name
  field :role

  validates :name, presence: true
  validates :role, presence: true

  attr_accessible :name
end

如果您有类似的东西User.create({name: 'John', role: 'admin'}),那么您的种子将失败,因为无法分配角色。

于 2013-01-28T21:41:27.107 回答