Rails 3使用关系/连接迁移update_all

时间:2011-08-04 19:57:58

标签: ruby-on-rails activerecord migration ruby-on-rails-3.1

给出以下模型

class User
  has_many :conversations
end

class Conversation
  belongs_to :user
  has_many :messages
end

class Message
  belongs_to :conversation
end

我想删除Conversation模型并将对用户的引用迁移到Message。 通常我会使用像

这样的东西
add_column :messages, :user_id, :integer

Message.reset_column_information
Message.all.each do |message|
  message.user_id = message.conversation.user_id
end

remove_column :messages, :conversation_id

但是在生产迁移中,在代码更新后运行。因此,这会引发错误。

可能我只需要一点提示。

2 个答案:

答案 0 :(得分:0)

即使您删除了属于:关系权限,消息仍然应该将'conversation_id'作为字段?

那么如果你这样做了:

message.user_id = User.find_by_id(message.conversation_id).user_id

答案 1 :(得分:0)

一个好的解决方案是在迁移中定义一个临时模型 - > Source: Rails Guides