在查询中过滤包含的rails模型的结果

时间:2016-06-27 15:28:10

标签: ruby-on-rails ruby ruby-on-rails-4 activerecord

我试图过滤掉一些包含模型的结果。

我有3个班级:

ALTER PROCEDURE [dbo].[test1]
@proc2 varchar(20)

AS 

Begin

select * from tab where name=@proc2

END

现在,我尝试使用ActiveRecord在一个查询中获取所有产品及其相关图像,他们的图像的布尔字段设置为false:

Platform (has many Products, has many ProductImages through Product)
Product (has many ProductImages)
ProductImage

上述问题的问题在于它过滤掉了没有任何带有dont_use的product_images的产品:true这不是我的目标。

我尝试使用相关图片获取所有产品,但只是使用dont_use过滤掉图片:false。

有关如何更改查询以满足我的需求的任何想法?

2 个答案:

答案 0 :(得分:1)

添加任何条件都将修改定义返回哪些产品的整体查询,而不是指定包含哪些图像。

您可以添加与您需要的条件的其他关联,并将其包括在内。例如:

class Product < Active record::Base
   has_many :images_in_use, -> { where(dont_use: false) }, class_name: ProductImage
end

platform.products.includes(:images_in_use)

答案 1 :(得分:-1)

我认为你有错误的where条款。

platform.products
        .includes(:product_images)
        .where('product_images.id is NULL OR product_images.dont_use = ?', true)