假设我有模特
User < ActiveRecord::Base
end
和他的STI兄弟
MasqueradeUser < User
end
masquerade_user = MasqueradeUser.find 123
masquerade_user.class
# => MasqueradeUser
听起来很荒谬,可以将此对象转换回父类User
masquerade_user.some_magic.class # => User
我知道我可以覆盖mode_name
,is_a?(User)
等方法,以便MasqueradeUser返回User
MasqueradeUser < User
def model_name
'User'
end
end
我只是想知道是否有办法将对象完全降级为父类实例
答案 0 :(得分:5)
您可以使用becomes
的{{1}}功能 - 请参阅here。
答案 1 :(得分:0)
您可以将ActiveRecord
的{{1}}方法归为一类:
becomes
毕竟只是将变量复制到支持它们的另一个对象(即:它可以“成为”任何类,而不仅仅是超类)