Ruby / Rails:使用Enumerator中的.find而不是ActiveRecord

时间:2011-03-11 23:59:56

标签: ruby-on-rails activerecord

Ruby的Enumerable有一个select可以从数组中选择某些项:

parent=@sections.select { |p| p.id==i.parent_id }

还有.find方法,只选择第一场比赛。但是,parent=@sections.find { |p| p.id==i.parent_id }调用ActiveRecord方法而不是Enumerable方法。如何使用Enumerable .find方法?

2 个答案:

答案 0 :(得分:2)

parent = @sections.all.find{|p| p.id == i.parent_id}

但是为什么你要从数据库中获取所有记录,然后对它们执行ruby查找,这时让数据库使用它的关系魔法远远高效得多并根据ID

获取 的正确记录。

获取所有记录然后执行ruby查找根本不可扩展 - 我在第一个数据库驱动的应用程序中非常快速地学到了这一点,因为我会抓住每个记录并循环遍历它们以收集我想要的数据。这根本不好。

您应该i.parent假设i belongs_to :parents

答案 1 :(得分:1)

Enumerable#detectEnumerable#find的别名。我不相信AR取而代之,所以也许它会对你有用。