1
我有以下查詢在rails s
在特定的控制器中失敗。這不是在rails c
失敗。爲什麼ActiveRecord語句在服務器失敗,但不是控制檯
Post.includes(:user).find(:all, :limit => 10, :order => 'users.display_name ASC')
在控制檯中,它返回正確的數據。在服務器中,我得到這個錯誤
ActiveRecord::StatementInvalid: PGError: ERROR: column posts.users.display_name does not exist
LINE 1: ...s_count" AS t0_r7, "posts"."popularity" AS t0_r8, "posts"."u...
^
查詢是漫長的,我就包括一些相關的片段
: SELECT "posts"."id" AS t0_r0, "posts"."post_content" AS t0_r1,
...
"posts"."popularity" AS t0_r8, "posts"."users.display_name" AS t0_r9,
"posts"."subtopics.name" AS t0_r10, "posts"."categories.category_name"
AS t0_r11
...
FROM "posts" LEFT OUTER JOIN "users" ON "users"."id" = "posts"."user_id"
ORDER BY users.display_name ASC LIMIT 10
在控制器中,查詢生成3項額外的條款。查詢將它們標記爲t0_r9,t0_r10和t0_r11。似乎AR正在添加這個,因爲我在該控制器操作的視圖中引用了那些特定的列。但我不明白爲什麼會這樣做,因爲這是使用includes
的目的。
我懷疑我可能已經發現了一個錯誤,無論是AR還是PG寶石,但我希望其他人的眼睛來驗證這一點。 –
您是否在使用任何可能影響查詢生成的寶石,插件或猴子補丁?當我遇到像這樣的奇怪問題時,這通常是我的問題。 –
確實沒有猴子補丁或插件。我使用的唯一一個與此查詢相關的gem是will_paginate,但是我沒有使用它(如後)那樣再現了錯誤。 PG gem只是PostgreSQL的ActiveRecord適配器。當我從控制檯運行它時,是否會出現並加載任何寶石或插件? –