Rubyでオブジェクトを別のクラスに変換する方法はありますか
概要
モデルがあるとしましょう
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
オブジェクトを親クラスのインスタンスに完全にダウングレードする方法があるかどうか疑問に思っていました
解決策
ActiveRecord の become 関数を使用できます - ここを参照してください。