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在?