这是我的查询结果(请注意“包含”):
@example_cars_collection = Car.where("name like ? ", "#{params[:car_name]}%").includes(:brand, :color, :shop)
现在,我想在@example_cars_collection中找到一辆名为“Opel”的汽车而不进行任何查询......我怎么能这样做?
我试着......
@example_cars_collection.where(:brand_id => Brand.where("name like ? ", "#{params[:brand_name]}%").select(:code))
...我得到了正确的结果,但显然我正在做一个新的查询...所以我的问题是,是否可以搜索查询结果。
任何想法?谢谢!
答案 0 :(得分:0)
使用to_a
根据结果构建数组,然后使用任何Array
方法:
@example_cars_collection.to_a.select { |car| car.brand.name.start_with?(params[:brand_name) }
请注意,如果您在抓取brand
时从包含的关联中排除@example_cars_collection
,则此代码会在执行brand
时导致N + 1个查询获取每个car.brand
此外,如果您没有to_a
,而是将块传递给select
,框架会将调用委托给Array#select
而不是与sql相关的select。