Rails .where vs .find

Я заметил, что метод Model.where всегда возвращает массив, даже если есть только один результат, когда метод Model.find этого не делает. Есть ли причина для этого? Я думал, что Model.where была предпочтительной функцией с Rails 3.X.

Должен ли я использовать Model.find когда я ожидаю один результат и Model.where когда я ожидаю более одного результата?

  • where возвращает ActiveRecord::Relation (а не массив, даже если он ведет себя так же, как один), который представляет собой набор объектов модели. Если ничего не соответствует условиям, он просто возвращает пустое отношение.

  • find (и связанные с ним динамические методы find_by_columnname ) возвращает один объект модели. Если ничего не найдено, ActiveRecord::RecordNotFound исключение ActiveRecord::RecordNotFound (но не с динамическими методами find_by_ ).

    Хотя find может возвращать Array записей, а не Relation, если задан список идентификаторов, используя, where это необходимо, с Rails 3. Многие аналогичные виды использования find теперь устарели или полностью исчезли .

Так что да, если вы только хотите и ожидаете одного объекта, проще find , так как иначе вы должны вызвать Model.where.first .

Обратите внимание, что параметры hashа старого стиля для find и многие динамические методы find_ устарели от Rails 4.0 ( см. Соответствующие примечания к выпуску ).

Фактически find_by принимает модельный объект, where получен ActiveRecord::Relation

 def find_by(*args) where(*args).take end 

Источник

Model.find использует столбец первичного ключа. Поэтому всегда есть точно один или никакой результат. Используйте его, когда вы ищете один определенный элемент, идентифицированный его идентификатором.

  • Как выразить запрос NOT IN с помощью ActiveRecord / Rails?
  • Предупреждение о устаревании при использовании has_many: через: uniq in Rails 4
  • Rails form_for: remote => true не вызывает метод js
  • Контроллер регистрации переопределения
  • разработать и несколько «пользовательских» моделей
  • Rails 3 Переадресация маршрутизации SSL с https на http
  • Запрос ActiveRecord OR Hash
  • простой счетчик посещений для просмотров страниц в рельсах
  • Удалить ссылку отправляет «Get» вместо «Удалить» в режиме Rails 3
  • Вложенные атрибуты неперечисленные параметры
  • Как отключить протоколирование сообщений конвейера (звездочки) в Rails 3.1?
  • Interesting Posts

    Условное форматирование: 3 цветовая шкала, отображающая актуальность текста в Excel для Mac

    Есть ли причина проверить указатель NULL перед удалением?

    Связывать тип файла с конкретной программой

    Можно ли добавить jars в maven 2 build classpath без их установки?

    Entity Framework 6 с SQLite 3 Code First – не будет создавать таблицы

    Отключить трекпад при подключении мыши – Windows 7 Macbook Pro

    Как сравнивать CDI и EJB? взаимодействовать?

    Google DFP – изменение размера пользовательского объявления SafeFrame внешнего контейнера iframe изнутри (развернуть объявление)

    Переустановка Windows MBR

    Почему Hibernate больше не работает (Windows 7)?

    Что означают следующие слова в C ++: нуль, инициализация по умолчанию и значение?

    Функция автозаполнения не требует правильного повторения чисел при использовании формулы AVERAGE () в Microsoft Excel

    Можно ли связать свойство Canvas’s Children в XAML?

    Что исправлено с Windows 7?

    Поддерживает ли SVG встраивание растровых изображений?

    Давайте будем гением компьютера.