Почему поиск одной записи возвращает массив? (Начинающий рельс) - PullRequest
5 голосов
/ 06 ноября 2011

У меня есть , где операция над моделью, которая возвращает один объект. Но я не могу использовать его в нотации объектов (похоже, он возвращает массив с объектом в [0]).

store = Store.where("some_id = ?", some_id)

puts store.name  # doesn't work

puts store  # shows array with the object at [0]

Ответы [ 3 ]

10 голосов
/ 06 ноября 2011

Потому что иногда вы не знаете, сколько объектов должен вернуть запрос, поэтому для согласованности вы всегда получаете массив.

Чтобы получить один объект, используйте

store = Store.where("some_id = ?", some_id).first

Если выищите основной идентификатор модели, вы также можете использовать

store = Store.find(some_id)

, который вызовет исключение RecrodNotFound (по умолчанию обрабатывается рельсами как 404), если не находит объект.*

5 голосов
/ 06 ноября 2011

Есть также динамические искатели

Store.find_by_some_id(some_id)

Они эквивалентны

Store.where(:some_id => some_id).first
0 голосов
/ 06 ноября 2011

Предложение where в rails 3.x всегда будет возвращать и arel objec, который можно использовать для цепочки методов.

Таким образом, оператор return предложения where всегда является массивом.доступ к первому элементу, который вы должны сделать

object.first, как рекомендует Jakub

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...