Исправить несоответствие с полиморфной ассоциацией
У меня есть полиморфная ассоциация в моей модели, и при ее создании произошла периодическая ошибка (в работе). Я исправил это, но теперь мне нужно восстановить записи, созданные под этой ошибкой.
Мои модели:
class User < ActiveRecord::Base
belongs_to :userable, :polymorphic => true
attr_protected :userable
end
class UserType1 < ActiveRecord::Base
has_one :user, :as => :userable, :dependent => :destroy
end
class UserType2 < ActiveRecord::Base
has_one :user, :as => :userable, :dependent => :destroy
end
Итак, проблема в том, что у меня есть некоторые записи в моей пользовательской таблице, не связанные с их полиморфной таблицей.
Пример записи (таблица пользователей):
id userable_id userable_type
999 null UserType1
И UserType1 не имеет никакого отношения к записи.
Поэтому я сделал запрос, чтобы обнаружить все ошибки ввода:
SELECT users.* from users where COALESCE(userable_id, 0) = 0'
Но я не знаю, как починить его чисто.
Моя идея - создать такой скрипт:
User.find_by_sql('SELECT users.* from users where COALESCE(userable_id, 0) = 0').each do |user|
userable = user.userable_type.classify.constantize.new
userable.user = user
userable.save
user.userable = userable
user.save
end
Спасибо
1 ответ
class User
alias_method :old_userable, :userable
def userable
old_userable || Userable.new
end
end