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

相关问题