首页 > 解决方案 > 如何在多态场景中获取关联记录

问题描述

我有一个像

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

有没有更好的方法来获得由Manageror/and his进行的所有交易employees?任何帮助,将不胜感激。谢谢!

标签: ruby-on-railsruby-on-rails-5.2

解决方案


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


推荐阅读