我有兩個表「用戶」和「lms_users」:加入|改變行爲內連接至左連接
class LmsUser
belongs_to :user
end
class User
has_one :lms_user
end
當我寫User.all(:joins => :lms_user)
它加入表與內連接。我想要左加入。如何改變這種行爲? (我不想使用SQL命令,只有Ruby語法適用於此。)
我該如何處理?
我有兩個表「用戶」和「lms_users」:加入|改變行爲內連接至左連接
class LmsUser
belongs_to :user
end
class User
has_one :lms_user
end
當我寫User.all(:joins => :lms_user)
它加入表與內連接。我想要左加入。如何改變這種行爲? (我不想使用SQL命令,只有Ruby語法適用於此。)
我該如何處理?
你可以拉斷LEFT JOIN沒有SQL,使用includes
,但只有當你指定的連接表(S)包括一列額外的約束(或僅僅是一個order
條款)。所以,
User.includes(:lms_user).all
不會產生LEFT JOIN(但兩個單獨的查詢,而不是),但
User.includes(:lms_user).where(:lms_user => {:role => 'admin'}).all
會。
更多關於這對
歡迎StackOverflow上。在提出問題之前,請在SO上進行搜索。這裏是你如何在Rails 3中做一個左外連接的答案:http://stackoverflow.com/questions/3245201/left-outer-joins-in-rails-3 –
@ChrisPeters:OP說他不喜歡使用SQL語法。 –
@MladenJablanović:我發佈的鏈接清楚地表明這是不可能的。 –