我有一个模型foo,在我的索引操作中我做了:
@foos = foo.all
现在,在视图中,我想知道此@foos
是否包含记录白色foo.id = whatever
这样做的一种方法是@foos.exists?(id: whatever)
,但这种方法意味着bd查询,我想避免这种情况。
其他方法将是@foos.collect(&:id).include?(whatever)
,但这意味着将所有@foos转换为数组,这是我要避免的另一种情况。
还有其他方法可以实现它吗?
提前致谢
更新
我也希望这个对象不仅知道是否存在,对不起解释很抱歉。
答案 0 :(得分:1)
您可以使用Enumerable#any?检查结果数组中是否存在该值:
@foos.any? { |foo| foo.id == whatever }
此检查将在结果数组上执行,而不会再次访问数据库,也不会将数组转换为其他结构。
<强>更新强>
如果您想要返回该对象,请使用Enumerable#find,如下所示:
@foos.find { |foo| foo.id == whatever }
这将返回foo.id == whatever
的第一次出现。