ActiveRecord的方法,不包含数据库或转换为Hash / Array

时间:2015-03-28 17:58:21

标签: ruby-on-rails activerecord

我有一个模型foo,在我的索引操作中我做了:

@foos = foo.all 

现在,在视图中,我想知道此@foos是否包含记录白色foo.id = whatever

这样做的一种方法是@foos.exists?(id: whatever),但这种方法意味着bd查询,我想避免这种情况。

其他方法将是@foos.collect(&:id).include?(whatever),但这意味着将所有@foos转换为数组,这是我要避免的另一种情况。

还有其他方法可以实现它吗?

提前致谢

更新

我也希望这个对象不仅知道是否存在,对不起解释很抱歉。

1 个答案:

答案 0 :(得分:1)

您可以使用Enumerable#any?检查结果数组中是否存在该值:

@foos.any? { |foo| foo.id == whatever }

此检查将在结果数组上执行,而不会再次访问数据库,也不会将数组转换为其他结构。

<强>更新

如果您想要返回该对象,请使用Enumerable#find,如下所示:

@foos.find { |foo| foo.id == whatever }

这将返回foo.id == whatever的第一次出现。