Complexe SQL 查询和分页

Complexe SQL query and pagination

我有这些表

                         clients
                         ----------
                         -id 
                         -full_name 

 payments                invoices
 -------------           ----------
 -id                     -id  
 -payable_id             -client_id 
 -payable_type           
                         credits
                         ----------
                         -id  
                         -client_id

得到这些模型的支持:

支付模式:

belongs_to :payable, polymorphic: true

客户端模型

has_many :invoices
has_many :credits
has_many :payments, as: :payable

invoice/credit 款

belongs_to :client
has_many :payments, as: :payable

一个client可以有多个payments:

我的问题是如何在 active_relation 对象中获取客户付款(直接通过文档),所以我可以对结果进行分页吗?

如果您不想听取我在问题下的评论中提出的建议,您可以自己编写 SQL 以精确检索所需记录:

class Payment
  def self.of_client(client)
    where(<<-SQL
            (payable_type = 'client' AND payable_id = ?) OR
            (payable_type = 'invoice' AND payable_id IN
              (SELECT id FROM invoices WHERE client_id = ?))
          SQL, client.id, client.id)
  end
end