Как получить связанные записи в полиморфном сценарии - PullRequest
0 голосов
/ 11 июля 2019

У меня есть сценарий, подобный

class Manager
  has_many :employees
  has_many :transactions, as: :transactable
end

class Employee
  belongs_to :manager
  has_many :transactions, as: :transactable
end

class Transaction
  belongs_to :transactable, polymorphic: true
end

Есть ли лучший способ получить все транзакции, совершенные Manager или / и его employees? Любая помощь будет оценена. Спасибо!

Ответы [ 2 ]

1 голос
/ 11 июля 2019
class Transaction

  def self.belonging_transactions(manager)
    where(
      "(transactable_type = 'Manager' AND transactable_id = ?) OR (transactable_type = 'Employee' AND transactable_id IN ?)",
      manager.id,
      manager.employees.ids
    )
  end

end

Вы можете получить все транзакции менеджера и его сотрудников,

Transaction.belonging_transactions(manager) # here manager is Manager class object

Результат можно получить, добавив (используя +) два where запроса, но это будет Arrayа не ActiveRecord::Relation

0 голосов
/ 11 июля 2019

Вы можете определить пользовательскую область для Transaction s, которые создаются Manager и его employees:

class Transaction
  scope :belonging_transactions, ->(manager) do
    where(transactable_type: "Manager", transactable_id: manager.id)
      .or(transactable_type: "Employee", transactable_id: manager.employees.ids)
  end
end

В качестве альтернативы, вы можете определить метод класса, который делает то же самое:

class Transaction

  def self.belonging_transactions(manager)
    where(transactable_type: "Manager", transactable_id: manager.id)
      .or(transactable_type: "Employee", transactable_id: manager.employees.ids)
  end

end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...