1

我有兩個模型用戶和公司has_and_belongs_to_many關聯。 我可以用Rails/Active Record has_and_belongs_to_many關聯 - 獲取記錄

Company.find(id).users 

我有問題被發現,不屬於某公司的所有用戶獲取屬於某公司的所有用戶。那麼,我可以這樣做使用

User.all - Company.find(id).users 

但是,我覺得有一個更好的方法來實現這一點。有沒有積極的解決方案呢?

目前,我有8個用戶(編號從1到8)。當我嘗試,

User.joins(:companies).where('companies.id = ?', 13).map(&:id) 

我得到的結果[7,8]這是預期的。當我將!=放在上面的查詢中時,結果不是我想要的,即1到6的數組。

需要幫助。 謝謝。

回答

2

最簡單的方法可能是用一個類的方法......是這樣的:

class User 

    has_and_belongs_to_many :companies 

    class << self 

    def exclude_company(company) 
     User.scoped.reject! {|u| u.companies.include? company} 
    end 
    end 
end 

然後在你的代碼:

@company = Company.find(company_id) 
@users = User.exclude_company(@company) 

因人而異;我過去做過類似的事情,但上面的代碼沒有經過測試。此外,如果這是一種常見的查詢模式,那麼及其隨附的MetaSearch中提供的ARel擴展可能會更好地滿足您的需求。注:這些由Rails 3.1中相同作者的新寶石取代。

希望這有助於。

+0

感謝您的快速回復,並對遲到的回覆感到抱歉。但是這引發了每個用戶的查詢,即在我的情況下共有8個查詢。我想我應該關心被解僱的查詢的數量。有沒有解決方法? – prasvin 2012-01-11 05:44:28

+0

是的,我打這個n + 1查詢wtf很難用這個建議...我編輯,嘗試新版本...應該更有效率。 – 2012-01-14 19:00:29

相關問題