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