Rails、Arel、Ransack:sort_by 关系之和
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 的总行数,并将其存储在 [=13] 上的 line_count
列中=].这将使查询速度显着加快,并使数据易于查看。也查看 Rails counter caching,它实现了这一点,您无需自己考虑所有回调。
但是,您也可以通过使用 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
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 的总行数,并将其存储在 [=13] 上的 line_count
列中=].这将使查询速度显着加快,并使数据易于查看。也查看 Rails counter caching,它实现了这一点,您无需自己考虑所有回调。
但是,您也可以通过使用 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