как получить значение отношения в form_builder в рельсах - PullRequest
3 голосов
/ 11 февраля 2010

У меня есть таблица товаров и категорий. Категория has_many Продукт и Продукт belongs_to Категория

Когда я работаю в консольной песочнице, я легко могу получить категорию, к которой относится продукт, выполнив:

@p = Product.find(29)
@p.category

Однако на странице редактирования Продукта я не могу получить категорию, к которой он относится.

<% form_for :product, @products do |p| %>
   <%= p.error_messages %>
   <td><%=label "category", "Category"%></td>
   <td><%=p.select :category_id, options_for_select(
          @categories.map {|s| [s.name, s.id]}, 
          ["#{p.category.id}"])%></td>

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

Я получаю ошибку:

undefined method `category' for #<ActionView::Helpers::FormBuilder:0xbb35f64>

1 Ответ

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

p содержит объект построителя форм, а не экземпляр вашей модели. Для доступа к экземпляру модели сделайте это:

... ["#{p.object.category.id}"])%></td>

Обратите внимание на «объект».

Объяснение: p в пределах блока form_for означает , а не ваш продукт, поэтому не типа #<Product>. Вместо этого это #<ActionView::Helpers::FormBuilder:0xbb35f64>, как говорится в сообщении об ошибке. Таким образом, он ничего не знает о свойствах вашей модели. FormBuilder содержит ваш объект формы в методе object.

FormBuilder содержит другие интересные инструменты, которые могут быть полезны. Я предлагаю сделать <%= debug p %>, чтобы узнать больше.

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