我遇到单表继承(STI)数据模型的问题,其中模型可以是类型OR之一。我可以添加第三种类型,类似于TradingCompanyClearingMember
,但我需要将两个模型中的代码复制到第三种类型中。这变得特别困难的是定义多态关系。是否有更容易/更好的方法/替代方案来考虑模拟这种行为?
class Company < ActiveRecord::Base
validates :type, inclusion: %w(TradingCompany ClearingMember TradingCompanyAndClearingMember)
end
class TradingCompany < Company
has_many :traders, as: :tradeable
belongs_to :clearing_member
end
class ClearingMember < Company
has_many :trading_companies
has_many :contacts
end
class TradingCompanyAndClearingMember < Company
# copied clearing member relationships
has_many :trading_companies
has_many :contacts
# copied trading company relationships
has_many :traders, as: :tradeable
belongs_to :clearing_member
end
class Trader
belongs_to :tradeable, polymorphic: true
end
答案 0 :(得分:3)
ruby与多重继承最接近的是混合模块。您可以将TradingCompany代码放入TradingCompanyModule,您可以将其导入两个贸易公司类型类。但我认为你可能会更好地使公司拥有一个TradingCompany和一个ClearingMember而不是继承。
答案 1 :(得分:1)
您可以创建一个关注模块,并将其包含在您需要的模型中。
module Trader
extend ActiveSupport::Concern
has_many :trading_companies
end
class TradingCompanyAndClearingMember < Company
include Trader
end
class ClearingMember < Company
include Trader
end