2011-10-12 75 views
0

我有兩個在我的用戶模型中聲明瞭右外連接的範圍。在這裏,他們是活動記錄調用加載範圍?

scope :users_with_school, joins("right outer join profiles on profiles.user_id = users.id  right outer join profiles_schools on profiles.id = profiles_schools.profile_id").uniq 
scope :full_profile, joins("right outer join profiles on profiles.user_id = users.id right outer join profiles_schools on profiles.id = profiles_schools.profile_id where users.pic_file_name is not null and profiles.occupation is not null and birthday is not null and profiles.desc is not null and hometown is not null ").uniq 

我的問題是,當我重裝我的控制檯,並呼籲User.all我看到這兩個領域的執行過程中(即我看到在控制檯窗口中的SQL),但我沒有看到任何其他範圍。它似乎沒有影響查詢的結果,但我仍然困惑爲什麼他們首先被執行。

這裏是一個例子 ruby​​-1.9.2-p290:023> reload! 重新加載...

=> true 
ruby-1.9.2-p290 :024 > User.all.count 
User Load (296.5ms) SELECT "users".* FROM "users" right outer join profiles on  profiles.user_id = users.id right outer join profiles_schools on profiles.id = profiles_schools.profile_id 
User Load (7.4ms) SELECT "users".* FROM "users" right outer join profiles on profiles.user_id = users.id right outer join profiles_schools on profiles.id = profiles_schools.profile_id where users.pic_file_name is not null and profiles.occupation is not null and birthday is not null and profiles.desc is not null and hometown is not null 
User Load (435.8ms) SELECT "users".* FROM "users" 

=> xxxx Users 

然後,當我不重裝重新執行查詢,它只是執行User.all查詢

ruby-1.9.2-p290 :025 > User.all.count 
User Load (606.7ms) SELECT "users".* FROM "users" 
=> xxxx Users (the same as above) 

所以,我的問題是,爲什麼會這樣,爲什麼它只發生在這兩個示波器(30個左右)之外,我能看到的唯一區別是它們是正確的外部連接

很顯然,我不希望這些示波器在我每次加載用戶類時都運行,目前它似乎只是當我重新載入所有內容時。任何見解?

(使用的是Postgres,導軌3.1.1紅寶石1.9.2)

回答

0

我相信你看到這一點,因爲.uniq作用,並返回一個數組,所以你的範圍不返回範圍。在連接後使用SQL「不同」的。選擇()

嘗試。

scope :users_with_school, joins("right outer join ...").select("DISTINCT users.id") 
+1

謝謝丹,刪除uniq工作。我需要修改的不同,所以我是包括整個用戶,所以我結束了一個範圍看起來像 '範圍:(「DISTINCT#{self.table_name} *」)不同,選擇' – reillyse