【问题标题】:Filters on ActiveRecord collection without firing off additional sql query过滤 ActiveRecord 集合而不触发额外的 sql 查询
【发布时间】:2016-07-14 15:39:43
【问题描述】:

我这样查询是为了返回一个 ActiveRecord 对象集合:

@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 查询。我认为,一旦你有了集合,就没有理由再次查询数据库以获取该集合上的过滤器。

问题:我如何才能过滤该 Ac​​tiveRecord 集合,而无需对数据库进行额外查询?

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

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

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

    请注意,在使用 Ruby 数组方法(如 selectrejectsort 等)后,您不能再将此数组与其他 ActiveRecord 范围或查询一起使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-03
      • 1970-01-01
      • 2018-07-22
      • 1970-01-01
      • 2019-09-06
      相关资源
      最近更新 更多