问题:
我正在使用ransack gem对表中的列进行排序。我有2种模式:Campaign和Course。一个运动有许多课程,一个课程属于一个运动。每个课程都有许多total_attendees。 “我的广告系列”表中有一个“参加者总数”列,我希望它可以排序。因此,它将汇总属于一个广告系列的每门课程的total_attendees字段,并根据该总和进行排序。
例如一个运动有3门课程,每门课程有10位参与者。广告系列表格上的“总出席者”列将显示30,并且可以针对所有其他广告系列的总参加者进行排序。
我发现了洗劫者: https://github.com/activerecord-hackery/ransack/wiki/Using-Ransackers
这个问题:Ransack sort by sum of relation
然后将下面的内容汇总在一起。
从模型-campaign.rb:
class Campaign < ApplicationRecord
has_many :courses
ransacker :sum_of_total_attendees do
query = "SELECT SUM(r.total_attendees)
FROM campaigns c
LEFT OUTER JOIN courses r
ON r.campaign_id = c.id
GROUP BY c.id"
Arel.sql(query)
end
end
从模型-course.rb:
class Course < ApplicationRecord
belongs_to :campaign, optional: true
end
查看:
<th scope="col"><%= sort_link(@q, :sum_of_total_attendees, 'Total Attendees') %></th>
控制器-campaigns_controller.rb:
all_campaigns = Campaign.all
@q = all_campaigns.ransack(params[:q])
@campaigns = @q.result
错误:
ransacker查询为我提供了我想要的数据,但是我不知道该怎么做才能获取正确的信息。
最初,当我单击th
链接对数据进行排序时,出现此错误:
PG::CardinalityViolation: ERROR: more than one row returned by a
subquery used as an expression
我不知道发生了什么变化,但是现在我遇到了这个错误:
PG::SyntaxError: ERROR: syntax error at or near "SELECT"
LINE 1: SELECT "campaigns".* FROM "campaigns" ORDER BY SELECT SUM(r....
^
: SELECT "campaigns".* FROM "campaigns" ORDER BY SELECT
SUM(r.total_attendees)
FROM campaigns c
LEFT OUTER JOIN courses r
ON r.campaign_id = c.id
GROUP BY c.id ASC
此错误似乎表明ransack搜索参数@q和ransacker查询不能一起使用。此请求中有两个选择,当绝对应该只有一个时,但第一个是来自萨克斯,所以我不确定该如何解决。
如何使用ransack使查询正确排序?
我看过的文章,但似乎不适用于我希望通过这个故事完成的事情: