2016-07-14 52 views
0

我为了返回一个对象ActiveRecord的集合进行查询,像这样:在我的代码我抢的记录从收集的其他地方过滤器没有发射过额外的SQL查询

@animals = Animal.all 

然后:

#fires off additional sql query but I do not want it to 
@specific_animals = @animals.where(animal_type: 'mammal') 

#fires off additional sql query but I do not want it to 
@specific_animals = @animals.where(animal_type: 'bird') 

我只想要第一条语句Animal.all发起一个SQL查询。我认为,一旦拥有这个集合,就没有理由再次在数据库中查询该集合上的过滤器。

问题:我该如何做到这一点,以便我可以过滤ActiveRecord集合而无需对数据库进行其他查询?

回答

1

ActiveRecord查询转换为仅在发送到数据库时有用的SQL语句。但是你可以使用Ruby数组方法来过滤。

@specific_animals = @animals.select { |a| a.animal_type == 'mammal' } 

注意,您可以不再使用这个数组与其他ActiveRecord的作用域或查询中使用Ruby的数组方法后,如selectrejectsort