gpt4 book ai didi

ruby-on-rails-3 - Rails ActiveRecord 作用域是另一个作用域的 "opposite",或者是用户, "lack"是一个属性

转载 作者:行者123 更新时间:2023-12-02 20:47:20 24 4
gpt4 key购买 nike

我有一个 user.rb 模型,在其中定义了 admins 的范围,即通过权限表具有 admin 角色的用户。

has_many :permissions
has_many :roles, :through => :permissions

范围的工作原理如下:

scope :admins, joins(:permissions).merge(Permission.admin_permissions)

我还想创建一个名为“非管理员”或类似名称的范围,即所有不具有管理员角色的用户。

最简单的方法是什么?

最佳答案

如果您想要进行反向 SQL 查询,则必须自己手动执行。没有内置的 ActiveRecord 解决方案。

scope :admins, joins(:permissions).merge(Permission.where("permissions.admin = true"))
scope :non_admins, joins(:permissions).merge(Permission.where("permissions.admin = false"))

如果范围很多或者很复杂,请考虑通过 id 排除它们:

User.where("id not in (?)", User.admins.pluck(:id))

# or if you are already using admin records
admins = User.admins
User.where("id not in (?)", admins.map(&:id))

根据原始查询的行数和复杂性,这可能比以前的方法慢或快。

关于ruby-on-rails-3 - Rails ActiveRecord 作用域是另一个作用域的 "opposite",或者是用户, "lack"是一个属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14406669/

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