0

这是我的查询结果(注意“包含”):

 @example_cars_collection = Car.where("name like ? ", "#{params[:car_name]}%").includes(:brand, :color, :shop)

现在,我想在@example_cars_collection 中找到一辆品牌为“欧宝”的汽车而不做任何查询……我该怎么做?

我尝试...

 @example_cars_collection.where(:brand_id => Brand.where("name like ? ", "#{params[:brand_name]}%").select(:code))

...我得到了正确的结果,但显然我正在做一个新的查询......所以我的问题是是否可以对查询结果进行搜索。

有任何想法吗?谢谢!

4

1 回答 1

0

根据结果​​构建一个数组to_a,然后使用任何Array方法:

@example_cars_collection.to_a.select { |car| car.brand.name.start_with?(params[:brand_name) }

请记住,如果您brand在获取时从包含的关联中排除,@example_cars_collection则此代码将导致 N+1 查询brand在执行时获取每个查询car.brand

此外,如果您不这样做to_a,而是将块传递给select,则框架会将调用委托给 ,Array#select而不是与 sql 相关的选择。

于 2013-08-22T13:09:42.897 回答