Объединение области видимости в HABTM и ассоциативных принадлежностях с OR - PullRequest
0 голосов
/ 25 июня 2019

У меня есть следующие модели:

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 Ответ

2 голосов
/ 25 июня 2019

Вы можете использовать простой SQL where для достижения этой цели:

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