我的模型中有多态关联,并且在创建时遇到间歇性错误(在生产中)。我修复了它,但现在我需要修复在这个bug下创建的条目。
我的模特:
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
由于
答案 0 :(得分:0)
class User
alias_method :old_userable, :userable
def userable
old_userable || Userable.new
end
end