0
我將如何使用活動記錄在這種情況下:Rails的排除查詢與活動記錄 - Rails的3.1
我有兩個表:用戶,管理員
管理員可以爲用戶也因而有USER_ID在他們的桌子。
我想選擇沒有爲user_id的管理員表中設置
注意所有用戶:這只是一個例子情況。如果這是一個真實的案例,那麼我當然不會爲用戶和管理員提供兩個不同的表格。
編輯:再次,我知道這樣做的語義是這樣糟糕的db設計 - 但它只是一個虛擬的情況。
我將如何使用活動記錄在這種情況下:Rails的排除查詢與活動記錄 - Rails的3.1
我有兩個表:用戶,管理員
管理員可以爲用戶也因而有USER_ID在他們的桌子。
我想選擇沒有爲user_id的管理員表中設置
注意所有用戶:這只是一個例子情況。如果這是一個真實的案例,那麼我當然不會爲用戶和管理員提供兩個不同的表格。
編輯:再次,我知道這樣做的語義是這樣糟糕的db設計 - 但它只是一個虛擬的情況。
您可以使用:conditions
包括一個NOT IN
:
User.find(:all, :conditions => ['user_id not in (?)', @admins.map(&:id)])
OR,您可以在代碼轉換成用戶scope
(又名named_scope
前到Rails 3.X):
class User < ActiveRecord::Base
scope :not_admin, lambda { |admins| { :conditions => ['user_id not in (?)', admins.select(&:id).join(',')] }
end
並將其作爲:
User.not_admin(@admins)
爲了不依賴於@admins
變量傳遞你可以使用joins
OR:
class User < ActiveRecord::Base
scope :not_admin, joins(:admin).where(:admins => { :user_id => nil })
end
有沒有一種辦法可以讓一個'scope'這樣我就可以把它放在模型而不是控制器? – Hopstream
是的,這是在答案:) – tolitius
似乎並沒有工作 - 我不斷收到一個錯誤的參數數量(0爲1)'錯誤 – Hopstream