Rails 3 Миграция update_all с отношением / объединением - PullRequest
0 голосов
/ 04 августа 2011

с учетом следующих моделей

class User
  has_many :conversations
end

class Conversation
  belongs_to :user
  has_many :messages
end

class Message
  belongs_to :conversation
end

Я хочу удалить модель беседы и перенести ссылку на пользователя в сообщение. Обычно я бы использовал что-то вроде

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

Но в Production миграции выполняются после обновления кода. Поэтому это приведет к ошибке.

Вероятно, мне просто нужна небольшая подсказка.

Ответы [ 2 ]

0 голосов
/ 06 августа 2011

Хорошим решением является определение временной модели внутри миграции -> Источник: Руководства по Rails

0 голосов
/ 05 августа 2011

В сообщении по-прежнему должно быть в качестве поля 'dialog_id', даже если вы удалили отношение принадлежат: правильно?

Так что, если вы сделали:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...