在第二次加载数据时预加载数据而不会弄乱关联

时间:2010-12-28 09:49:13

标签: ruby-on-rails ruby-on-rails-3

这就是我的模型的样子

User
belongs_to :computer

Computer
has_many :user

用户是在人们在网站上注册帐户但计算机是我在seeds.rb / some .rake文件中创建的预加载数据时创建的。当应用程序首次启动并且人们开始注册并与正确的computer_id相关联时,一切都很好。但是,假设我想将另一台计算机添加到列表中

Computer.destroy_all
Computer.create({:name => "Akane"})
Computer.create({:name => "Yoda"})
Computer.create({:name => "Mojito"}) #newly added

第二次运行rakefile会搞乱关联,因为User表中的computer_id引用了Computer表中的旧id。由于我已经运行了上面的脚本,因此计算机表中的id不断增加,而不考虑用户对它的关联。现在,所有用户都没有对其计算机的引用,并且所有计算机现在都有新的ID。

问题:我是否有更好的方法来预加载数据而不会搞砸我的关联?我希望能够添加新的计算机而不必破坏用户的表。销毁计算机表对我来说很好,并重新重建它,但现有用户必须保持完整的旧协会。

1 个答案:

答案 0 :(得分:0)

您是否考虑过只是减少计算机表的迁移?

假设您的迁移名为db / migrate / 1_create_computers.rb

    $    rake db:migrate:down version=1

从种子中删除destroy方法。 你总是保留用户表...你必须有一个列computer_id

当然,协会也是

  ComputerClass < ActiveRecord::Base
      has_many :users  #(don't forget the 's')
  end