3个表共享一个关联表



我有两个独立的模型,我想通过相同的关联链接到第三个共享模型。我可以有两个独立的关联表,但希望共享以简化SQL报告这个例子是假设的,以简化现实;不要打它

class Assoc < ApplicationRecord
belongs_to :part
belongs_to :car
belongs_to :truck
end
class Part < ApplicationRecord
has_many :assocs
has_many :cars, through: :assocs
has_many :trucks, through: :assocs
end
class Car < ApplicationRecord
has_many :assocs
has_many :parts, through: :assocs
end
class Truck < ApplicationRecord
has_many :assocs
has_many :parts, through: :assocs
end

当前保存卡车汽车时失败。我不知道为什么car.errors没有透露任何信息。据猜测,该关联可能需要3个ID,而我只希望它有零件汽车卡车,但不是全部三个。上面的模型转换为具有以下模式的SQL表:

assocs

<1,2,3><1,2,3><1,2,3><1,2,3>
类型示例数据
idbigint
part_idbigint
car_idbigint
truck_idbigint

基于我上面的假设,我测试了关联模型,并使汽车/卡车在关联上是可选的,这起到了作用:

class Assoc < ApplicationRecord
belongs_to :part
belongs_to :car,   optional: true
belongs_to :truck, optional: true
end

我认为这现在需要一个验证器来检查car_idtruck_id的存在。我还没有实现它,但我认为Assoc应该包括这样的东西:

class Assoc < ApplicationRecord
belongs_to :part
belongs_to :car,   optional: true
belongs_to :truck, optional: true
validates :car_id,   presence: true, unless: :truck_id
validates :truck_id, presence: true, unless: :car_id
end

相关内容

  • 没有找到相关文章

最新更新