有没有办法将对象转换为ruby中的另一个类

时间:2013-07-18 13:10:04

标签: ruby-on-rails 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_nameis_a?(User)等方法,以便MasqueradeUser返回User

等值
MasqueradeUser < User
  def model_name
    'User'
  end
end 

我只是想知道是否有办法将对象完全降级为父类实例

2 个答案:

答案 0 :(得分:5)

您可以使用becomes的{​​{1}}功能 - 请参阅here

答案 1 :(得分:0)

您可以将ActiveRecord的{​​{1}}方法归为一类:

becomes

毕竟只是将变量复制到支持它们的另一个对象(即:它可以“成为”任何类,而不仅仅是超类)