在Rails 3项目中加载种子数据

直到现在,我一直在使用Fixtures,以及rake任务为我的数据库创建一些种子数据。 这很好用,但我突然遇到了奇怪的问题(比如在模型中获取1,2,3 ..的自动ID,然后在连接模型中输入错误的ID,使得关联根本不起作用)。

因此,我想知道更好的选择是什么。 我已经阅读了不同的内容,以及播种数据的轨道广播。

我的数据并不真正共享相同的信息。 这就像必须按原样插入的单独条目。 例如,认为我必须插入1000个具有特定能力和技能的用户。 这需要一些连接模型和一些巧妙的关联处理,如灯具。

那么,有没有比灯具方法更好的方法呢?

以下是我一直使用的三种不同选项。 让我知道你的想法以及你的成就。 祝一切顺利。

Github Gist >>

Rails 3提供了一些基本的播种function。 请参阅: http : //ryandaigle.com/articles/2009/5/13/what-s-new-in-edge-rails-database-seeding

总结一下:

  • 您可以在db/seeds.rb放置任何种子代码(在Ruby中,使用您的AR模型)
  • 然后运行rake db:seed来加载它( rake db:setup会自动执行此操作)

在我的种子文件中,我倾向于在事务中包装所有内容,并且还手动定义ID(假设数据库中没有现有数据)。 帽子提示Prologuegem 。 例:

 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。