将HABTM的合并范围和OR结合起来

时间:2019-06-25 11:29:38

标签: sql ruby-on-rails postgresql activerecord rails-activerecord

我有以下型号:

class User < ApplicationRecord
  has_and_belongs_to_many :lists
end
class Workspace < ApplicationRecord
  has_many :lists, dependent: :nullify
end
class List < ApplicationRecord
  has_and_belongs_to_many :users
  belongs_to :workspace, optional: true

  scope :by_workspace, ->(workspace) { where(workspace: workspace) }
  scope :by_user, ->(user) { joins(:users).where(users: { id: user }) }
end

我需要一个by_workspace_or_user范围,该范围返回属于给定工作区或给定用户的任何列表。我试过使用or组合这些,但是没有运气。

1 个答案:

答案 0 :(得分:2)

您可以使用普通SQL where来实现此目的:

List
  .left_outer_joins(:users)
  .where("users.id = ? OR lists.workspace_id = ?", user.id, workspace.id)