gpt4 book ai didi

ruby-on-rails - 具有 NOT IN 条件的 Rails 嵌套 SQL

转载 作者:行者123 更新时间:2023-12-02 00:15:44 26 4
gpt4 key购买 nike

我目前有这段代码:

class Group < ActiveRecord::Base
has_many :roles

#can't find better name for this method
def self.without_role_ids
find_by_sql('select id from groups where id not in
(select distinct group_id from roles)').map { |g| g.id }
end
end

class Role < ActiveRecord::Base
belongs_to :group
end

without_role_ids 方法输出没有任何角色的组的 id。

我想做的是重写这个方法:

def self.without_role_ids
where("id NOT IN (?)", Role.pluck(:group_id))
end

它会产生两个查询。

可以运行

where(id: Role.select(:group_id))

它会生成一个 SQL 查询,但使用 IN 而不是我需要的 NOT IN

是否可以在不使用 find_by_sql 的情况下通过一个查询执行 NOT IN

最佳答案

我找到了一个解决方案,用 Squeel 很容易执行这样的查询:

https://github.com/ernie/squeel

现在的方法代码是:

where{id.not_in Role.select(:group_id)}

它产生这个查询:

SELECT "groups".* FROM "groups" WHERE "groups"."id" NOT IN
(SELECT "roles"."group_id" FROM "roles" )

有关于 Squeel 的 Railscast:http://railscasts.com/episodes/354-squeel

关于ruby-on-rails - 具有 NOT IN 条件的 Rails 嵌套 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13284926/

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