[英]Rails PG::UndefinedTable: ERROR: missing FROM-clause entry for table
[英]Rails impressionist gem - missing FROM-clause entry for table “impressions”
我正在使用Rails 4.2,並設置了印象派 gem,它可以很好地記錄頁面印象。
我正在嘗試做與此Stackoverflow帖子中完全相同的事情,但是答案不起作用。 我試過了:
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:錯誤:缺少表“ impressions”的FROM子句條目LINE 1:... BY impressions.impressionable_id ORDER BY count(impression ...
^:選擇“相冊”。*從“相冊”內聯接“印象”到“印象”。“ impressionable_id” =“相冊”。“ id”和“印象”。“ impressionable_type” = $ 1哪里(impressions.created_at <= '2015-01-02 00:50:18 -0200'和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字符零寬度空格(U + 200B ORDER BY count(impressions.id)
。 看看在錯誤消息的呈現中impressions
如何斷行,否則是不會發生的。
GROUP BY
問題:由於查詢選擇了albums.*
,因此它必須使用GROUP BY albums.id
而不是GROUP BY impressions.impressionable_id
(假設albums.id
是主鍵)。 這在數值上是等效的,因為無論如何這些表都是通過這兩個字段進行等價聯接的,但是看起來,在這種情況下,SQL引擎本身無法確定這種等效性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.