ruby-on-rails - 范围的倒数

标签 ruby-on-rails ruby activerecord scope

是否有一种方法可以否定作用域的结果? 我有 3 个模型,由 has_many 关联:通过关联

用户.rb

class User < ActiveRecord::Base
    has_many :user_training_maps
    has_many :trainings, through: :user_training_maps
end

训练.rb

class Training < ActiveRecord::Base
    has_many :user_training_maps
    has_many :users, through: :user_training_maps
end

user_training_map.rb

class UserTrainingMap < ActiveRecord::Base
    belongs_to :user
    belongs_to :training
end

之前,我想找到属于(注册)培训的所有用户。在 user.rb 中,这有效:

scope :all_enrolled, -> { joins(:trainings) }

现在,我需要帮助找到所有不属于(未注册)培训的用户。我无法让它工作: scope :all_unenrolled, -> { !joins(:trainings) } 相反,它只是返回所有用户。类似未注册用户 =(所有用户)-(已注册用户)

最佳答案

试试这个

scope : all_enrolled, -> { joins(:trainings) } 范围:not_enrolled,-> { where.not(id: all_enrolled) }

关于ruby-on-rails - 范围的倒数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48273854/

相关文章:

ruby-on-rails - 我如何返回这个 ruby 数组

ruby-on-rails - 使用 Rails before_action 如何防止恶意用户创建/更新/编辑和删除

ruby-on-rails - 在 Rails 中大写单词的最佳做法是什么?

ruby-on-rails - 每次推送到 heroku 时都需要重置数据库吗?

ruby - HTTParty 返回一个字符串

ruby - Lita 中的条件路由和机器人名称

mysql - 根据 has_many 关系按计数排序

ruby-on-rails - 当我的 asset/javascript 文件夹中有 CoffeeScript 文件时,我收到此错误

ruby-on-rails - SOA - 身份验证服务设计

css - Font-Awesome-Rails 未加载图标