gpt4 book ai didi

mysql - Rails/Active Record has_and_belongs_to_many 关联 - 获取记录

转载 作者:行者123 更新时间:2023-11-29 02:33:39 24 4
gpt4 key购买 nike

我有两个模型 User 和 Company 通过 has_and_belongs_to_many 关联。我可以使用

获取属于某个公司的所有用户
Company.find(id).users 

我遇到的问题是找到不属于某个公司的所有用户。好吧,我可以用

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

但是,我觉得肯定有更好的方法来实现这一点。是否有针对此的 activerecord 解决方案?

目前,我有 8 个用户(id 从 1 到 8)。当我尝试时,

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

我得到了预期的结果 [7, 8]。当我在上面的查询中放置 != 时,结果不是我想要的,即 1 到 6 的数组。

需要帮助。谢谢。

最佳答案

最简单的方法可能是使用类方法...类似于:

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)

YMMV;我过去做过类似的事情,但上面的代码未经测试。

另外,如果这是一个常见的查询模式,您可能会得到 MetaWhere 中提供的 ARel 扩展的更好服务。及其同伴元搜索。注意这些在 Rails 3.1 中被同一作者的新 gem 取代

希望这对您有所帮助。

关于mysql - Rails/Active Record has_and_belongs_to_many 关联 - 获取记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8754358/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com