如何在不命中数据库的情况下操作集合?

时间:2014-10-13 15:58:35

标签: ruby-on-rails ruby activerecord

在我的Rails应用程序中,我有一个小方法,它将一个集合作为参数:

def calculate_column_width(collection)
  if collection.where(:sample => true).present?
    "10%"
  else
    "20%"
  end
end

它有效,但我不喜欢它创建了两个额外的数据库查询。

如何重写函数,使其在已经由Rails加载到内存中的集合(例如@people)上运行?

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

最好不要使用ActiveRecord方法,而是像集合一样处理集合。以上为例:

def calculate_column_width(collection)
  if collection.find { |object| object.sample == true }
    "10%"
  else
    "20%"
  end
end

请注意,此find方法是ruby数组中存在的方法,只会返回与条件匹配的第一个方法。它应该避免进行额外的数据库查询。