Rails 印象派 gem - table "impressions" 缺少 FROM 子句条目

Rails impressionist gem - missing FROM-clause entry for table "impressions"

我正在使用 Rails 4.2 并设置了 impressionist gem,它可以很好地记录页面印象。

我正在尝试做与 this Whosebug post 中完全相同的事情,但答案不起作用。我试过了:

start_time = 30.days.ago
@mostReadAlbums30Days = Album.joins(:impressions).where("impressions.created_at<='#{Time.now}' and impressions.created_at >= '#{start_time}'").group("impressions.impressionable_id").order("count(impression‌​s.id) DESC")

这会产生以下 SQL 和错误消息

PG::UndefinedTable: ERROR: missing FROM-clause entry for table "impression‌​s" LINE 1: ... BY impressions.impressionable_id ORDER BY count(impression...

^ : SELECT "albums".* FROM "albums" INNER JOIN "impressions" ON "impressions"."impressionable_id" = "albums"."id" AND "impressions"."impressionable_type" = WHERE (impressions.created_at<='2015-01-02 00:50:18 -0200' and impressions.created_at >= '2014-12-03 02:50:18 UTC') GROUP BY impressions.impressionable_id ORDER BY count(impression‌​s.id) DESC

我正在使用 Postgresql v9.3.5.2。我怎样才能让这个查询工作?

主要问题(根据评论):

您的查询中有一个细微的拼写错误。它在 ORDER BY count(impression‌s.id) 的 n 和 s 之间包含一个 Unicode 字符 ZERO WIDTH SPACE (U+200B)。查看 impressions 如何在错误消息的呈现中断行,否则不会发生这种情况。


GROUP BY问题: 由于查询选择 albums.*,因此它必须 GROUP BY albums.id 而不是 GROUP BY impressions.impressionable_id(假设 albums.id 是主键)。这在数值上是等价的,因为无论如何这些表都是通过这两个字段等价连接的,但看起来,SQL 引擎在这种情况下无法自行计算出这种等价性。