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