Рельсы.где и как найти
я заметил, что Model.where
метод всегда возвращает массив, даже если есть только один результат, где в качестве Model.find
метод не делает. Есть ли причина для этого? Я думал Model.where
была предпочтительной функцией с Rails 3.Х.
Я должен использовать Model.find
когда я ожидаю один результат и Model.where
когда я ожидаю более одного результата?
3 ответа:
where
возвращаетActiveRecord::Relation
(не массив, хотя он ведет себя так же, как один), который является коллекция модели объектов. Если ничто не соответствует условиям, он просто возвращает пустое отношение.
find
(и связанные с ним динамическиеfind_by_columnname
методы) возвращает a один объектной модели. Если ничего не найдено,ActiveRecord::RecordNotFound
исключение поднял (но не с динамическимfind_by_
методов).пока
find
может возвращать массив записей-не отношение - если задан список идентификаторов, используяwhere
предпочтительно с рельсов 3. Много подобных примененийfind
теперь устарели или полностью исчезли.так что да, если вы хотите и ожидаете только один объект, используя
find
легче, так как в противном случае вы должны позвонитьModel.where.first
.обратите внимание, что параметры хэша старого стиля
find
и много динамичныхfind_
методы являются устаревшими по состоянию на рельсы 4.0 (см. соответствующие примечания к выпуску).