讓說,我有模型有沒有辦法對象轉換到另一個類的紅寶石
User < ActiveRecord::Base
end
和他的STI兄弟
MasqueradeUser < User
end
masquerade_user = MasqueradeUser.find 123
masquerade_user.class
# => MasqueradeUser
荒謬的,因爲它聽起來,可能這個對象轉換回父類User
masquerade_user.some_magic.class # => User
我知道我可以重寫喜歡方法,is_a?(User)
等,使MasqueradeUser將返回像User
MasqueradeUser < User
def model_name
'User'
end
end
我只是想知道,如果有一種方法可以徹底降級對象的父類的實例
MasqueradeUser.superclass.name –
你可以使用'model_name.superclass.name =='User''或'model_name.ancestors.include? 「用戶」'。如果不是,也許你不應該使用STI。 –
thx球員,但我不需要在我的代碼中實現比較/條件,我需要欺騙其他另一個gem,我的對象是不同的克拉斯。在Yehuda Zargarov答案中的解決方案(我會接受的,只是等待是否有人知道任何本地Ruby解決方案) – equivalent8