问题描述
|
到现在为止,我一直在使用Fixtures以及一个rake任务来为我的数据库创建一些种子数据。这很好用,但是我突然遇到了奇怪的问题(例如在模型中获得1,2,3 ..的autogen id,然后在join模型中获得错误的id,使关联根本无法工作)。
因此,我想知道什么是更好的选择。我已经阅读了有关不同内容的内容,以及有关播种数据的内容。
我的数据并没有真正共享相同的信息。就像必须按原样插入单独的条目。例如,认为我必须插入具有特定能力和技能的1000个用户。这需要一些联接模型和对关联的一些整洁处理,例如夹具。
那么,有没有比固定装置更好的方法来实现这一目标?
解决方法
这是我一直使用的三个不同选项。让我知道您的想法以及如何发展。祝一切顺利。
Github要点>>
, Rails 3提供了一些基本的播种功能。参见:http://ryandaigle.com/articles/2009/5/13/what-s-new-in-edge-rails-database-seeding
总结一下:
您可以将任何种子代码(在Ruby中,使用AR模型)放在ѭ0中
然后运行
rake db:seed
加载它(rake db:setup
自动执行此操作)
在我的种子文件中,我倾向于将所有内容包装在事务中,并且还手动定义ID(假设数据库中没有现有数据)。序幕宝石的帽子提示。例:
ActiveRecord::Base.transaction do
if User.count == 0 && Role.count == 0
user = User.new :name => \"Admin\",:email => \"admin@example.org\",:password => \"password\",:password_confirmation => \"password\"
user.id = 1
user.save!
user.confirmed_at = user.confirmation_sent_at
user.save!
role1 = Role.new :name => \'Admin\'
role1.id = 1
role1.save!
role2 = Role.new :name => \'Member\'
role2.id = 2
role2.save!
user.role_ids = [1,2]
user.save!
end
end
可能会有更好的方法!
在您的情况下,您可以从CSV文件或其他文件中加载数据并以编程方式创建模型对象。
, 固定ID可能对数据库中的默认数据很有用。在@jits情况下,他不想弄乱ID和角色权限,因此需要在多个环境或设置中对ID进行固定和维护。