我目前正在开发一个 Rails 3 应用程序,它看起来可能需要对几个模型使用类表继承。
这是正在发生的事情的一个简化示例。
我有一个名为 Person 的类,具有诸如姓名、电子邮件、密码之类的通用属性,这些属性对于应用程序中的所有类型的人来说都是通用的,并用于身份验证。
人有两个子类(或两种类型的人......):驾驶员和乘客。这两个子类都共享 Person 的通用属性,但又具有它们自己独有的特定附加属性。 (例如,驾驶员可以拥有许多车辆和许可证,但乘客则不能)
对于这种情况我该如何实施CTI?我一直在看这里提供的一个例子:
http://rhnh.net/2010/08/15/class-table-inheritance-and-eager-loading http://rhnh.net/2010/08/15/class-table-inheritance-and-eager-loading
但它没有推测如何从 Driver 或 Passenger 对象访问 Person 的公共属性,我对此有点困惑。
我特别想知道的是:
如果我要更新驱动程序的属性,如何轻松访问和更新父人员表上的相关属性?我是否必须挂钩 after_save 回调并分离出哪个属性更新去哪里?或者有更好的方法来解决这个问题吗?
还有一个插件“acts_as_relation”可以做到这一点,
https://github.com/hzamani/acts_as_relation/ https://github.com/hzamani/acts_as_relation/
在你的情况下,代码将是这样的:
class Driver < ActiveRecord::Base
acts_as :person
end
class Passenger < ActiveRecord::Base
acts_as :person
end
别忘了添加person_type
and person_id
列到persons
table.
现在 Drive 和 Passenger 都继承了 Person 属性、验证和方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)