我有一个设置,其中有多个模型继承自 Base 模型 - 标准单表继承:
class Parent < ActiveRecord::Base
end
class A < Parent
end
class B < Parent
end
我的 STI 设置正确且效果很好!但是,我想添加 :type 特定属性,例如描述。
例如,我希望所有 A 类型的 Parent 都有描述,“我是 A 类型的 Parent。我的功能是...”
我想避免一遍又一遍地复制数据(例如,让 A 的每个实例存储相同的描述)。
为此想到的第一件事是在子类上有一个特定于模型的方法。所以像:
class A < Parent
def self.description
"I am the A type of Parent. My function is for..."
end
end
我不喜欢这个解决方案,因为这确实是关于特定类型的子类(而不是关于子类实例本身)的数据,并且您会遇到使这种行为(部署以更改数据等)带来的所有问题。
这是唯一的方法还是我没有看到的替代方法?
为描述创建模型怎么样?
class Description < ActiveRecord::Base
has_many :as
end
class A < Parent
belongs_to :description
before_save { description_id = 1 }
end
这样,您可以管理description
数据库中的内容,并且可以通过 Web 界面或迁移对其进行修改。此外,您可以轻松地为不同的子类添加不同的描述,或者甚至在需要时根据实例更改它们。
这种方法的一个缺点是您需要使用正确的描述创建模型。一个潜在的解决方案可能是before_save
orbefore_create
钩子,但我相信这些不是唯一的方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句