gpt4 book ai didi

ruby-on-rails - Rails habtm 和查找没有关联的记录

转载 作者:行者123 更新时间:2023-12-01 19:52:45 25 4
gpt4 key购买 nike

我有 2 个模型:

class User < ActiveRecord::Base
has_and_belongs_to_many :groups
end

class Group < ActiveRecord::Base
has_and_belongs_to_many :users
end

我想创建一个返回不属于任何组的用户的范围(这对于效率和链接范围的能力很重要)。经过多次尝试,我未能执行方法而不是作用域,这使得 User.all 上的 collect 很丑陋而且......不正确。

有什么帮助吗?

也许第二个问题:我设法创建一个范围,返回属于任何给定组的用户(以 id 数组形式给出)。

scope :in_groups, lambda { |g|
{
:joins => :groups,
:conditions => {:groups => {:id => g}},
:select => "DISTINCT `users`.*" # kill duplicates
}
}

它可以更好/更漂亮吗?(使用 Rails 3.0.9)

最佳答案

根据命名约定,您的隐式联接表将被命名为groups_users。在您的数据库中确认一次。假设是:

在较新的 Rails 版本中:

scope :not_in_any_group, -> {
joins("LEFT JOIN groups_users ON users.id = groups_users.user_id")
.where("groups_users.user_id IS NULL")
}

对于较旧的 Rails 版本:

scope :not_in_any_group, {
:joins => "LEFT JOIN groups_users ON users.id = groups_users.user_id",
:conditions => "groups_users.user_id IS NULL",
:select => "DISTINCT users.*"
}

关于ruby-on-rails - Rails habtm 和查找没有关联的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7032194/

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