使用STI时如何将ActiveRecord对象强制转换为另一个类?

fot*_*nus 22 ruby activerecord casting ruby-on-rails single-table-inheritance

我目前正在使用ActiveRecord单表继承.

如何将我的一个模型从A型转换为B型?他们有同一个父母.

Oma*_*shi 43

#becomes 是你在找什么:

http://api.rubyonrails.org/classes/ActiveRecord/Persistence.html#method-i-becomes

  • http://api.rubyonrails.org/classes/ActiveRecord/Persistence.html#method-i-成果不被弃用,只是被移动了. (3认同)
  • 如果你想学究气,在这里用铸造是错误的词,它实现了这个人想要的。 (2认同)

Kar*_*arl 5

您不需要进行强制转换,因为Ruby在编译时不执行任何类型检查.你想达到什么目的?

假设你有一个类Dad,并子类SonDaughter.

你可以只有一个变量@dad并将其存储在一个Son或一个Daughter对象中,并将其视为一个变量Dad.只要他们回应相同的方法,它就没有区别.这是一个名为"鸭子打字"的概念.

  • 我不完全记得为什么我会这样做,但如果我记得很清楚,当你与多态关联有一个STI关系时需要它,否则它会被错误的`type`字段保存. (3认同)