我有以下型号:

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组合这些,但没有运气。

最佳答案

您可以使用普通SQLwhere来实现这一点:

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

关于sql - 将HABTM的合并范围和OR结合起来,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56753070/

10-15 18:42