Rails印象派宝石 - 缺少表格的#FROM子句条目"印象"

时间:2015-01-02 02:54:57

标签: sql ruby-on-rails postgresql join

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

我正在努力做与this Stackoverflow 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:错误:缺少表的FROM子句条目   &#34;印象S&#34;第1行:... BY impressions.impressionable_id ORDER BY   计数(印象...

     

^:SELECT&#34;专辑&#34;。* FROM&#34;专辑&#34; INNER JOIN&#34;印象&#34;上   &#34;曝光&#34;&#34; impressionable_id&#34; =&#34;专辑&#34;。&#34; id&#34;和   #&34;曝光&#34;&#34; impressionable_type&#34; = $ 1 WHERE   (impressions.created_at&lt; =&#39; 2015-01-02 00:50:18 -0200&#39;和   impressions.created_at&gt; =&#39; 2014-12-03 02:50:18 UTC&#39;)GROUP BY   impressions.impressionable_id ORDER BY count(impression s.id)DESC

我正在使用Postgresql v9.3.5.2。如何才能使此查询生效?

1 个答案:

答案 0 :(得分:1)

主要问题(每条评论):

您的查询中存在一个微妙的拼写错误。它在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引擎无法自己解决这个等价。