Rails通过belongs_to多态关联has_many关联

时间:2016-08-10 16:12:10

标签: ruby-on-rails ruby ruby-on-rails-4

在我的数据库中有4个模型

class MasterPayment < ActiveRecord::Base
  has_many :payments
end

class Payment < ActiveRecord::Base
  belongs_to :master_payment
  belongs_to :payable, polymorphic: :true
end

class TreatmentPlan < ActiveRecord::Base
  has_many :payments, as: :payable
end

class ArbitraryBillableItem < ActiveRecord::Base
  has_many :payments, as: :payable
end

我想要做的是在MasterPayment中建立一个关联,将应付款与主付款相关联。

目前,我能找到的最接近的是如下设置主付款模式

class MasterPayment < ActiveRecord::Base
  has_many :payments
  has_many :treatment_plans, through: :payments, source: :payable, source_type: "TreatmentPlan"
  has_many :arbitrary_billable_items, through: :payments, source: :payable, source_type: "ArbitraryBillableItem"

  def payables
    self.treatment_plans + self.arbitrary_billable_items
  end
end

我遇到的唯一问题是它不像是“正确”的方式。

我可以看到rails没有解决方案的唯一原因是因为你可能必须联合表以在一个sql语句中返回它。

是否有另一种方法可以实现此目的,以便更多地使用活动记录关联?

1 个答案:

答案 0 :(得分:0)

这看起来太简单但是有效吗?

def payables
  self.payments.joins(:treatment_plans, :arbitrary_billable_items).distinct
end