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(impressions.id) DESC")
这会产生以下 SQL 和错误消息
PG::UndefinedTable: ERROR: missing FROM-clause entry for table
"impressions" 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(impressions.id) DESC
我正在使用 Postgresql v9.3.5.2。我怎样才能让这个查询工作?
主要问题(根据评论):
您的查询中有一个细微的拼写错误。它在 ORDER BY count(impressions.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 引擎在这种情况下无法自行计算出这种等价性。
我正在使用 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(impressions.id) DESC")
这会产生以下 SQL 和错误消息
PG::UndefinedTable: ERROR: missing FROM-clause entry for table "impressions" 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(impressions.id) DESC
我正在使用 Postgresql v9.3.5.2。我怎样才能让这个查询工作?
主要问题(根据评论):
您的查询中有一个细微的拼写错误。它在 ORDER BY count(impressions.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 引擎在这种情况下无法自行计算出这种等价性。