我有一个产品和类别表。分类 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>
最佳答案
p
持有一个表单构建器对象,而不是您的模型实例。要访问模型实例,请执行以下操作:
... ["#{p.object.category.id}"])%></td>
注意“对象”。
说明:
p
在 form_for
的区块范围内是 不是 您的产品,所以它是 不是 类型 #<Product>
.相反,它是一个 #<ActionView::Helpers::FormBuilder:0xbb35f64>
正如错误消息告诉您的那样。因此它对模型的属性一无所知。 A FormBuilder
将您的表单对象保存在其 object
中方法。FormBuilder 包含其他可能有用的很酷的工具。我建议做一个
<%= debug p %>
了解更多。
关于ruby-on-rails - 如何在 rails 中的 form_builder 中获取关系值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2240399/