我现在有这个。
has_many :planes, -> { where approved: true }, class_name: 'UserPlane'
我想它有点气味,但它很有效,很容易做到。我想正确的方法是做这样的事情。
has_many :planes, through: :user_planes, source: :plane do
def approved
where('user_planes.approved = ?', true)
end
end
has_many :user_planes
因为我只想要获得批准的飞机,而我不关心那些没有批准的飞机。与第一种方式相反,采用第二种方式有什么好处。感谢。
答案 0 :(得分:2)
这两个片段会给你不同的结果。第一个关联将从数据库返回一组UserPlane
个对象,而第二个关联将返回一组Plane
个对象。但是,您应该能够将第二个版本简化为:
has_many :user_planes, -> { where approved: true }
has_many :planes, through: :user_planes, source: :plane