ruby-on-rails - 如何在 rails 中的 form_builder 中获取关系值

标签 ruby-on-rails

我有一个产品和类别表。分类 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>

注意“对象”。

说明: pform_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/

相关文章:

ruby-on-rails - File.open 返回整数而不是文件不一致

ruby-on-rails - 基于操作转换的数据库

javascript - Rails 无需离开页面即可更新模型

ruby-on-rails - Rails 引擎线程安全 - ActiveResource

ruby-on-rails - 如何从 Time.now 获取时区偏移

ruby-on-rails - RAILS_ENV=dev bundle exec rake db :seed not working

javascript - Materialise 选项卡突然不再工作了

ruby-on-rails - rspec 集成测试中的 session 对象

ruby-on-rails - Ruby on rails "No route matches"

ruby-on-rails - rails : URL/path with parameters