Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何将ransacker查询连接到ransack排序搜索参数_Sql_Ruby On Rails_Postgresql_Ransack - Fatal编程技术网

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使查询正确排序

我看过但似乎不适用于我希望通过本故事实现的目标的文章:

  • :这是我在很多地方工作过的一个,但我不确定为什么它对这个用户有效,而对我无效。它们不会显示控制器中发生了什么变化(如果有的话)
  • :这不包括汇总表列的问题
  • :这不适用于我根据汇总数据进行排序的需要
  • 当前位置这看起来像我正在做的,但我不确定为什么他们的有效,而我的无效