2011-03-21 65 views
1

任何人都可以爲下面的查詢提出一個簡單的修復?活動記錄之間的查詢衝突:連接和:包括

Workout.all(:joins => [:person, :schedule], 
     :conditions => ["schedule.id = ? AND people.gym_id = ?", schedule.id, gym.id ], 
     :order => "time DESC", 
     :include => [:person]), 

錯誤消息指出的Mysql ::錯誤:沒有唯一的表/別名:「人」:然後很長的SQL查詢

當我刪除:人從:包括選擇,代碼工作正常。然而,然後我得到了「n + 1查詢」問題:當我顯示鍛鍊時,它會爲每個人生成一個單獨的查詢。

我假設來自連接和包含選項的'people'表在生成的SQL中發生衝突。有沒有辦法使用查找選項爲具有活動記錄的表別名?或者我需要使用sql片段作爲:joins選項,以便我可以使用AS爲表格添加別名?

我還沒有將此應用程序升級到3.0版,所以我無法使用「Class.joins()。where()」語法。

回答

2

您可以刪除:人從加入,並保持它在包括可以從人表中添加字段:選擇選項如

Workout.all(:joins => [:schedule], 
    :conditions => ["schedule.id = ? AND people.gym_id = ?", schedule.id, gym.id ], 
    :order => "time DESC", 
    :select => "workouts.*,people.*" 
    :include => [:person]) 
+0

謝謝,並獲得成功,但我有一個很難理解爲什麼。將人放入:include會生成一個左外連接,它應該返回所有鍛鍊,而不僅僅是那些與person.gym_id條件匹配的人,對吧?但它確實有效。 – 2011-03-21 23:01:34