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

equ*_*nt8 0 ruby ruby-on-rails

让我说我有模特

User < ActiveRecord::Base
end
Run Code Online (Sandbox Code Playgroud)

和他的STI兄弟

MasqueradeUser < User
end 

masquerade_user =  MasqueradeUser.find 123
masquerade_user.class
# => MasqueradeUser
Run Code Online (Sandbox Code Playgroud)

听起来很荒谬,可以将这个对象转换回父类 User

masquerade_user.some_magic.class   # => User
Run Code Online (Sandbox Code Playgroud)

我知道我可以覆盖像和其他方法mode_name,is_a?(User)以便MasqueradeUser将返回像User

MasqueradeUser < User
  def model_name
    'User'
  end
end 
Run Code Online (Sandbox Code Playgroud)

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

Yeh*_*rov 5

你可以使用的becomes功能ActiveRecord- 见这里.