On Rails 4,通过Heroku托管。我已经阅读了一些关于这个问题的线索,但需要自己澄清一下。相关模型:
提交:
belongs_to :category
belongs_to :user
belongs_to :organization
belongs_to :division
在提交的索引页面中,我列出了用户提交的所有提交内容,按:contest_year
属性进行分组,以及提交所属的:organization_id
属性。
提交控制器:
def index
@paginate = current_user.submissions.group([:organization_id,
:contest_year]).includes(:organization).page(params[:page]).per(3).order('contest_year DESC')
end
(此索引页面具有Kaminari的分页功能)
索引视图:
<% @paginate.each do |contest| %>
<div class="submissionheading"><h2><%= contest.contest_year %>: <%= contest.organization.name %></h2></div>
<% current_user.submissions.includes(:submission_details, :user, category: :award).order('created_at DESC').where(organization_id: contest.organization_id, contest_year: contest.contest_year).in_groups_of(3, false) do |group| %>
<div class="row">
<% group.each do |submission| %>
<div class="col-md-4">
<p class="bold"><%= submission.category.award.name %> <%= submission.category.code %>: <%= submission.category.name %></p>
<p>Submitted By: <%= submission.user.first_name %> <%= submission.user.last_name %></p>
</div>
<% end %>
</div><br/>
<% end %>
<% end %>
<p><%= paginate @paginate %></p>
我收到此错误:
PG::Error: ERROR: column "submissions.id" must appear in the GROUP BY clause or be used in an aggregate function
如果我将:id
属性插入上述控制器代码的组部分,它会重复每次提交的提交信息。这是一个例子:
它应该正常做什么(在组部分中没有:id
):
在组部分中插入:id
后它的作用:
它会针对每个提交进行迭代,而不是仅针对具有相同组织/年份的三个提交进行迭代。基本上,我不想将:id
添加到分组中,但PG正在抛出此错误!如何重新编写控制器代码,以便PG在保持分组正确的同时接受它?谢谢!
答案 0 :(得分:1)
将select('DISTINCT(submissions.id), submissions.*')
添加到模型查找器或将链uniq
添加到其上:
def index
@paginate = current_user.submissions.uniq.group([:id, :organization_id,
:contest_year]).includes(:organization).page(params[:page]).per(3).order('contest_year DESC')
end
<强>更新强>
问题出在您的视图代码中。您正在迭代@paginate
集合,然后在其中再次调用current_user.submissions
。不知道你在这里做了什么,但它可能通过in_groups_of(3)
调用来解决所有问题。检查您的@paginate
集合是否确实是唯一的,然后调试您的观看代码。