Ruby / Rails: использование .find из Enumerator вместо ActiveRecord - PullRequest
1 голос
/ 12 марта 2011

В Ruby's Enumerable есть выбор, который может выбирать определенные элементы из массива:

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

Существует также метод .find, чтобы выбрать только первое совпадение.Однако parent=@sections.find { |p| p.id==i.parent_id } вызывает метод ActiveRecord вместо Enumerable.Как использовать метод Enumerable .find?

Ответы [ 2 ]

2 голосов
/ 12 марта 2011
parent = @sections.all.find{|p| p.id == i.parent_id}

Но почему вы хотите получить все записей из базы данных, а затем выполнить поиск в рубине, когда гораздо эффективнее позволить базе данных использовать ее?реляционная магия и получение правильных записей для , основанных на идентификаторах?

Получение всех записей, а затем поиск рубина не масштабируется вообще - я очень быстро узнал об этом в своемпервые приложения на основе базы данных, когда я собирал каждую запись и просматривал их, чтобы собрать нужные данные.Это совсем не хорошо.

Вы должны просто сделать i.parent при условии i belongs_to :parents

1 голос
/ 12 марта 2011

Enumerable#detect - псевдоним для Enumerable#find.Я не верю, что AR заменит его, поэтому, возможно, он будет работать для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...