【问题标题】:Complexe SQL query and pagination复杂的 SQL 查询和分页
【发布时间】:2015-04-29 08:33:05
【问题描述】:

我有这些表

                         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 对象中获取客户付款(直接 AND 通过文档),以便对结果进行分页?

【问题讨论】:

  • 如何重新设计数据库结构以在付款中同时包含 client_id 和 invoice_id(对于直接付款可以为空)并摆脱多态关联?它会变得非常简单。

标签: sql ruby-on-rails pagination


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-22
    • 2016-01-22
    相关资源
    最近更新 更多