到目前为止,我一直在使用Fixtures以及rake任务为我的数据库创建一些种子数据。这很好用,但我突然遇到了奇怪的问题(比如在模型中获取1,2,3 ..的自动ID,然后在连接模型中输入错误的ID,使得关联根本不起作用)。
因此,我想知道更好的选择是什么。我已经阅读了不同的内容,以及有关种子数据的轨道广播。
我的数据并不真正共享相同的信息。这就像是必须按原样插入的单独条目。例如,认为我必须插入1000个具有特定能力和技能的用户。这需要一些连接模型和一些巧妙的关联处理,如灯具。
那么,有没有比灯具方法更好的方法呢?
答案 0 :(得分:3)
以下是我一直使用的三种不同选项。让我知道你的想法以及你的成就。一切顺利。
答案 1 :(得分:2)
Rails 3提供了一些基本的播种功能。请参阅:http://ryandaigle.com/articles/2009/5/13/what-s-new-in-edge-rails-database-seeding
总结:
db/seeds.rb
rake db:seed
加载此项(rake db:setup
自动执行此操作)在我的种子文件中,我倾向于在事务中包装所有内容,并且还手动定义ID(假设数据库中没有现有数据)。帽子提示到Prologue gem。例如:
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文件或其他东西加载数据,并以编程方式创建模型对象。
答案 2 :(得分:0)
固定ID可能对数据库中的默认数据有用。在@jits的情况下,他不希望ID和角色权限搞砸,需要在几个环境或设置中不断修复和维护ID。