我不确定解决这个问题的最佳方法是什么。
我有一个关于has_many的关系:
class User < ActiveRecord::Base
has_many :animals,
through: :farms
end
我的问题涉及想要添加一个额外的farm
,其中包括动物,即使技术上用户不拥有该农场。
如果用户有10个农场,其中ID为1到10,那么我想要做的事情就是包括一个ID为15的农场。
所以通常会user.animals
。我想做user.animals.include("farms.id = ?", 15)
之类的事情,它可以在所有用户农场(1 - 10)中提供动物的结果,还包括15号农场的动物。
我将如何做到这一点?
最终我的查询看起来像user.animals.reorder(created_at: :desc).includes(:owner, :farm).page(5).per(30).to_a
在查询中包含其他服务器场的最佳方法是什么?
答案 0 :(得分:1)
您可以将以下方法添加到您的用户模型中:
def animals_with_extra_farms(farm_ids = [])
farm_ids += farms.map(&:id)
Animal.where(farm_id: farm_ids)
end
这不会导致2次数据库查询。从性能的角度来看,还有其他解决方案可能更好,但这种解决方案非常直接且易于理解。在我看来,简单的代码可以值几毫秒的性能。
如果事实证明这是一个瓶颈,你可以随时重构它。