ActiveRecord не возвращает итерацию, когда найдена только одна запись - PullRequest
0 голосов
/ 15 февраля 2010

Это может быть просто, но я начинаю с рельсов.

У меня есть следующее утверждение:

@subjects = Cartitem.find_by_cid(session[:customerid])

На мой взгляд, у меня есть такой код:

<% @subjects.each do |d| %>
 <tbody>
  <tr>

Все работает, когда вышеуказанный запрос возвращает несколько строк. Однако, когда приведенный выше запрос возвращает только одну строку, я получаю сообщение об ошибке, в котором говорится, что метод each не определен.

Как избежать этого? Нужно ли иметь if/else на мой взгляд?

1 Ответ

3 голосов
/ 15 февраля 2010

Возможно

@subjects = Cartitem.find_all_by_cid(session[:customerid])

будет работать, потому что в документации Rails сказано, что строка, которую Вы дали:

@subjects = Cartitem.find_by_cid(session[:customerid])

на самом деле позвонит:

Cartitem.find(:first, :conditions => ["cid = ?", session[:customerid]])

Я не думаю, что решение с to_a (упомянутое пользователем141146) будет работать вообще, потому что возвращаемый объект не является экземпляром какого-либо типа QuerySet (например, как в Django), но таким образом является чистым экземпляром модели он, вероятно, вообще не имеет такого метода.

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