繁体   English   中英

Rails,Arel,Ransack:按关系求和

[英]Rails, Arel, Ransack: sort_by sum of relation

class Document
  has_many :lines
end

class Line
  belongs_to :document
end

sort_by @q, :total

您好,我需要按行总和(行中的金额列)对文档进行排序。

我想到了一个抢劫犯,但如何正确编写呢?

ransacker :total do
  parent ???
end

您可能需要考虑计算任何Line对象的after_create和after_destroy行总数,并将其存储在documentsline_count列中。 这将大大加快查询速度,并使数据的布局易于查看。 也可以查看Rails计数器缓存 ,它无需您自己考虑所有回调即可实现此目的。

但是,您也可以通过使用COUNT和GROUP BY来使用抢劫犯。 这是一个快速的:

  ransacker :line_count do
    query = "(SELECT COUNT(lines.id) FROM lines WHERE lines.document_id = documents.id GROUP BY lines.document_id)"
    Arel.sql(query)
  end

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM