Ruby on rails 如何在多态场景中获取相关记录

Ruby on rails 如何在多态场景中获取相关记录,ruby-on-rails,ruby-on-rails-5.2,Ruby On Rails,Ruby On Rails 5.2,我有这样一个场景 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 有

我有这样一个场景

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
有没有更好的方法来获取由
经理
或/和他的
员工
进行的所有交易?任何帮助都将不胜感激。谢谢

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

结果可以通过添加(使用
+
)两个
,其中
查询得到,但它将是
数组
,而不是
活动记录::关系

您可以为
经理及其
员工所做的
事务
定义自定义范围:

类事务
经营范围:所属交易,->(经理)do
其中(可交易类型:“经理”,可交易id:Manager.id)
.或(可交易类型:“员工”,可交易id:manager.employees.id)
结束
结束
或者,您可以定义一个类方法,该类方法执行相同的操作:

类事务
def自我归属交易(经理)
其中(可交易类型:“经理”,可交易id:Manager.id)
.或(可交易类型:“员工”,可交易id:manager.employees.id)
结束
结束

此解决方案不会给出正确的结果,因为您只检查了
可交易的\u id
,并且可能存在经理id和他的一个员工id相同的情况(即,两者都是不同的表)。因此,您还必须在where作用域中检查
可交易类型
。@RakeshPatidar-是的,您是正确的-修复了。我希望它能有所帮助。在where作用域中应该有
in
操作符<代码>(可交易类型=‘员工’和可交易id在?