Sql 如何将ransacker查询连接到ransack排序搜索参数
问题:Sql 如何将ransacker查询连接到ransack排序搜索参数,sql,ruby-on-rails,postgresql,ransack,Sql,Ruby On Rails,Postgresql,Ransack,问题: 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
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
class Course < ApplicationRecord
belongs_to :campaign, optional: true
end
<th scope="col"><%= sort_link(@q, :sum_of_total_attendees, 'Total Attendees') %></th>
all_campaigns = Campaign.all
@q = all_campaigns.ransack(params[:q])
@campaigns = @q.result
我正在使用ransack gem对表中的列进行排序。我有两种模式:活动模式和课程模式。一个活动有许多课程,一个课程属于一个活动。每门课程都有一定数量的总学员。“我的活动”表中有一列列出了与会者总数,我希望它可以排序。因此,它将汇总属于单个活动的每个课程的total_Attenders字段,并根据该总和进行排序
一个活动有3个课程,每个课程有10名参与者。“活动”表上的“与会者总数”列将显示30人,并且可以根据所有其他活动的与会者总数进行排序
我发现了劫掠者:
因此,这个问题:
从这一点,我们可以总结出下面的很多内容
来自Model-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
class Course < ApplicationRecord
belongs_to :campaign, optional: true
end
<th scope="col"><%= sort_link(@q, :sum_of_total_attendees, 'Total Attendees') %></th>
all_campaigns = Campaign.all
@q = all_campaigns.ransack(params[:q])
@campaigns = @q.result
错误:
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
class Course < ApplicationRecord
belongs_to :campaign, optional: true
end
<th scope="col"><%= sort_link(@q, :sum_of_total_attendees, 'Total Attendees') %></th>
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
我不知道发生了什么变化,但现在我得到了以下错误:
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,所以我不确定如何解决它
如何使用ransack使查询正确排序
我看过但似乎不适用于我希望通过本故事实现的目标的文章:
- :这是我在很多地方工作过的一个,但我不确定为什么它对这个用户有效,而对我无效。它们不会显示控制器中发生了什么变化(如果有的话)
- :这不包括汇总表列的问题
- :这不适用于我根据汇总数据进行排序的需要
- 当前位置这看起来像我正在做的,但我不确定为什么他们的有效,而我的无效