#ruby-on-rails #ruby-on-rails-3.1
#ruby-on-rails #ruby-on-rails-3.1
Вопрос:
На мой взгляд, у меня есть следующий код, который должен отображать значение для поля отображения:
<% @product.options.each do |o| %>
<tr>
<td class="option">
<%= o.display %>
...
Но o.display
часть не работает для самой первой записи option. Во всех других параметрах оно корректно выводит отображаемое значение, но не в самом первом. Я проверил в 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 %>
перед попыткой распечатать отображаемое поле, оно не только отображает отладочную информацию, но и отображает отображаемое значение должным образом. Без отладки отображаемое значение отображаться не будет.
Комментарии:
1. Не похоже, что вы делаете что-то неправильно; вы уверены , что параметры рассматриваемого продукта соответствуют вашим представлениям? То, что это работает для всех параметров, кроме одного, больше указывает на проблему с данными / извлечением.
2. Все остальные поля отображаются правильно для первого варианта. Данные для поля отображения отображаются в других параметрах. Не уверен, как еще я мог бы проверить что-либо еще о параметрах.
Ответ №1:
display — это метод класса Object в Ruby, и, я думаю, это создало проблему с ActiveRecord. Возможно, вы могли бы изменить имя этого поля, это должен быть более простой вариант.
Комментарии:
1. Есть ли другой способ получить доступ к полю отображения? Мне кажется странным, что если это конфликт с методом Ruby, то другие параметры будут отображать поле отображения.
2. @croceldon Ммм, но метод может быть добавлен динамически, хотя он все еще не объясняет (для меня), что пока происходит.
Ответ №2:
Поместите код в отладчик и выполните пошаговое выполнение.
Я бы поместил отладчик в контроллер, где @product (или где бы ни устанавливались эта и другие переменные экземпляра).
Чтобы поместить ваше приложение rails в отладчик — вам нужно добавить «gem ruby-debug» в ваш Gemfile и выполнить установку пакета. (возможно, вам потребуется выполнить «ruby-debug19», если вы используете ruby 1.9). Когда вы нажмете на действие, появится консоль, в которой вы запустили сервер. Вы можете использовать «n» для следующей, «l» для списка и «p» для печати объектов. (Прочитайте руководство по отладчику).
Вам нужно спросить себя «что находится в @product.option»? Это массив? Отвечает ли оно на каждую из них? Что такое первый элемент?
Я бы зашел так далеко, что удалил цикл и просто использовал «@product.option[0].display» в опции.
В отсутствие дополнительной информации лучшее, что я могу помочь, это помочь вам в отладке.