2012-09-19 66 views
2

我有兩個表「用戶」和「lms_users」:加入|改變行爲內連接至左連接

class LmsUser 
    belongs_to :user 
end 

class User 
    has_one :lms_user 
end 

當我寫User.all(:joins => :lms_user)它加入表與內連接。我想要左加入。如何改變這種行爲? (我不想使用SQL命令,只有Ruby語法適用於此。)

我該如何處理?

+0

歡迎StackOverflow上。在提出問題之前,請在SO上進行搜索。這裏是你如何在Rails 3中做一個左外連接的答案:http://stackoverflow.com/questions/3245201/left-outer-joins-in-rails-3 –

+0

@ChrisPeters:OP說他不喜歡使用SQL語法。 –

+0

@MladenJablanović:我發佈的鏈接清楚地表明這是不可能的。 –

回答

0

你可以拉斷LEFT JOIN沒有SQL,使用includes,但只有當你指定的連接表(S)包括一列額外的約束(或僅僅是一個order條款)。所以,

User.includes(:lms_user).all 

不會產生LEFT JOIN(但兩個單獨的查詢,而不是),但

User.includes(:lms_user).where(:lms_user => {:role => 'admin'}).all 

會。

更多關於這對

0

:joins => "LEFT JOIN lms_users ON lms_users.user_id = users.id"

+0

你忘了「左外」部分嗎? –

+0

沒有任何ruby syntex? – Moosa

+0

基本上我不想用sql sytex。 – Moosa