Почему значение поля не отображается для первой записи в Rails? - PullRequest
1 голос
/ 10 ноября 2011

У меня есть следующий код, который должен показывать значение для поля дисплея в моем представлении:

<% @product.options.each do |o| %>
<tr>
    <td class="option"> 
    <%= o.display %> 
    ...

Но часть o.display не работает для самой первой записи опции.Во всех остальных вариантах он правильно печатает отображаемое значение, но не на самом первом.Я проверил в MySQL, что существует значение для этой конкретной опции (Вариант 1):

mysql> select id,title,display from options;
+----+-----------------------------+---------+
| id | title                       | display |
+----+-----------------------------+---------+
|  1 | Option 1                    |       1 |
|  2 | Option 2                    |       2 |
|  3 | Option 3                    |       3 |
+----+-----------------------------+---------+

Что я здесь не так делаю?

Дополнительная информация:

Если я добавлю:

<%= debug o %>

перед попыткой печати поля дисплея, он не только отображает отладочную информацию, но и отображает значение дисплея правильно.Без отладки не будет отображаться отображаемое значение.

Ответы [ 2 ]

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

display - это метод класса Object в Ruby, и это, я полагаю, создало проблему с ActiveRecord.Может быть, вы могли бы изменить имя этого поля, это должен быть более простой вариант.

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

Поместите код в отладчик и выполните шаг.

Я бы поставил отладчик в контроллер, где @product (или там, где устанавливаются эта и другие переменные экземпляра).

Чтобы поместить приложение rails в отладчик - вам нужно добавить "gem ruby-debug" в ваш Gemfile и выполнить установку пакета. (вам может понадобиться сделать «ruby-debug19», если вы используете ruby ​​1.9). Когда вы нажмете на действие, появится консоль, на которой вы запустили сервер. Вы можете использовать «n» для следующего, «l» для списка и «p» для распечатки объектов. (Прочтите руководство по отладчику).

Вам нужно спросить себя "что находится в @ product.option"? Это массив? Это отвечает каждому? Какой первый элемент?

Я бы зашел так далеко, что удалил цикл и просто использовал "@ product.option [0] .display" в опции.

При отсутствии дополнительной информации лучшее, что я могу помочь, - это помочь вам отладить.

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