我想不出更好的方法来重构下面的代码(参见这个问题),尽管我知道它非常难看。但是,它会引发 Postgres 错误(不是 SQLite):
ActiveRecord::StatementInvalid:
PG::Error: ERROR:
column "articles.id" must appear in the GROUP BY clause or be used in an aggregate function
查询本身是:
SELECT "articles".*
FROM "articles"
WHERE "articles"."user_id" = 1
GROUP BY publication
这来自以下视图代码:
=@user.articles.group(:publication).map do |p|
=p.publication
=@user.articles.where("publication = ?", p.publication).sum(:twitter_count)
=@user.articles.where("publication = ?", p.publication).sum(:facebook_count)
=@user.articles.where("publication = ?", p.publication).sum(:linkedin_count)
在 SQLite 中,这给出了输出(例如)NYT 12 18 14 BBC 45 46 47 CNN 75 54 78,这正是我所需要的。
如何改进代码以消除此错误?