Complexe SQL查询和分页

时间:2015-02-26 19:43:52

标签: sql ruby-on-rails 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

发票/信用模型

belongs_to :client
has_many :payments, as: :payable

client可以有多个payments

  • 直接付款
  • 支付给客户文件(发票/信用证)

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

1 个答案:

答案 0 :(得分:1)

如果您不想根据我在评论中的建议中提出建议,您可以编写自己的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