Лучший способ найти одну запись с помощью ActiveRecord 3 / Arel? - PullRequest
35 голосов
/ 13 июня 2011

Где я раньше делал это:

Foo.find_by_bar('a-value')

Теперь я могу сделать это:

Foo.where(:bar => 'a-value').limit(1).first

Это рекомендуется? Это лучший способ? Должен ли я продолжать использовать «старый» способ, потому что он продолжает быть полезным синтаксическим сахаром, или есть еще лучший способ, которым я могу сделать это сейчас, который будет поддерживать цепочку и все другие хорошие вещи?

Ответы [ 4 ]

45 голосов
/ 10 февраля 2014

Рельсы 4:

Foo.find_by bar: 'a_value' , wibble: 'a wibble value'
23 голосов
/ 13 июня 2011

Я думаю, что предпочтительный способ вернуть одну запись будет таким же, как во втором примере, но вы можете опустить часть ограничения:

Foo.where(:bar => 'a-value').first

Это соответствует новому синтаксису и поддерживает цепочку, если выхочу добавить больше условий к поиску.

4 голосов
/ 02 августа 2013

Rails дает вам целый набор магических методов для такого рода вещей:

Foo.find_by_bar('a-value')

Вы также можете использовать несколько атрибутов:

Foo.find_by_bar_and_wibble('a foo value', 'a wibble value')

И добавление!заставляет его выбросить RecordNotFound, если ничего не найдено:

Foo.find_by_bar!('a-value')
2 голосов
/ 11 марта 2014

Другая альтернатива:

Foo.find(:first, conditions: { bar: 'a-value' })

Вы также можете использовать несколько атрибутов:

Foo.find(:first, conditions: { bar: 'a-value' , wibble: 'a wibble value' })
...