首页 > 解决方案 > Rails 多个连接由 or 分隔

问题描述

我需要一个查询来选择所有具有匹配条件的分配(组或仅分配)的用户。这在 SQL 中很容易做,但结果将是一个数组。我需要结果是 ActiveRecord::Relation 以便我可以对结果应用更多范围。

通常它会这样-"SELECT * from users JOINS assignments on (assignments.user_id = users.id) WHERE assignments.id > 5 OR JOINS group_assignments on (group_assignments.user_id = users.id) WHERE group_assignments.id > 5)"

但我真的不知道,如何使用“joins”或“includes”来做到这一点——“both_assignments”下的范围并没有真正起作用,我也不知道为什么。

class User < ActiveRecord::Base
  has_many :assignments
  has_many :group_assignments

  scope :both_assignments, lambda {
   joins(:assignments).where(condition..)
     .or(joins(:group_assignments).where(condition...)
    }
end

class Assignment < ActiveRecord::Base
  belongs_to :user
end

class GroupAssignment < ActiveRecord::Base
  belongs_to :user
end

标签: ruby-on-rails

解决方案


推荐阅读