Рельсы.где и как найти
я заметил, что 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 (см. соответствующие примечания к выпуску).