2013-08-31 1 views
3

Я видел людей, переписав их код из Model.find_by_x(x) в Model.find_by(x: x) (example), и мне интересно, если это время, чтобы сделать некоторые домашнее хозяйство.Действительно ли find_by_x (мягко) устарел?

Действительно ли find_by... действительно не рекомендуется? (Некоторые доказательства/обсуждения были бы хорошими.) Это Rails commit намекает, что это так. Также здесь, в ActiveRecord::Base doc, что это изменение фиксации упоминается как «мягко устаревшее».

Извлеченный dynamic_finders gem утверждает, что это не так: «Обратите внимание, что find (primary_key), find_by ... и find_by ...! Не устарели».

А также в 4.0 release notes: «Все динамические методы, кроме find_by_... и find_by _...! Устарели».

ответ

4

Я понимаю, что этот ответ не хватает фактических данных/обсуждение, но я хотел бы просто сказать, что это имеет смысл для меня, что Model.find_by_attribute и тому подобное должны быть устаревшими - то есть вы должны рассматривать их как таковые и уйти от них, хотя они официально не устарели. Причина в том, что эти методы должны пройти через метод_missing, чтобы сделать свою магию. Таким образом, они не так быстро, как с использованием find_by(x: y), который под сценой просто использует ARel: where(x: y).take. Это помогает?

+0

Спасибо @pdobb, да. Я следую вашим рассуждениям. Это слой накладных расходов, который не добавляет никакой пользы для удобочитаемости, поэтому отход имеет смысл независимо. –

+0

Меня интересовал аспект производительности этих искателей (который привел меня к этому сообщению) и сделал быстрый тест ниже 'Benchmark.bm (10) do | x |' 'x.report (" find_by ") { 1000.times {Model.find_by (my_field: "value")}} ' ' x.report ("find_by_attr") {1000.times {Model.find_by_my_field ("value")}} ' ' end' ' 'user system total real' ' find_by 0.610000 0.250000 0.860000 (1.276131) ' ' find_by_attr 0.560000 0.040000 0.600000 (1.032426) ' Просим прощения за форматирование! –

Смежные вопросы