Fields_for使用accepts_nested_attributes设置表单无法正常工作

时间:2011-10-05 19:15:36

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1 fields-for

我确信这只是我缺乏经验所以请耐心等待。

我有一个有价格的模型MenuItem。不同的项目类型(menu_items,产品,事件)可以有价格。

我已将其设置如下:

class MenuItem < ActiveRecord::Base
   ...
   has_one :price, :as => :pricable
   accepts_nested_attributes_for :price
   attr_accessible :price_attributes
   ...
end

class Price < ActiveRecord::Base
   belongs_to :pricable, :polymorphic => true
end

Price对象的价格值是Mysql5上的小数(8,2)。

以我的形式:

<%= form_tag "/menus/save" do %>
...
<% menu_header_form.menu_items.each do |item| %>
   <div><%=item['header'] %></div>
   <%=text_field :menu_item, :header, :index=>item.id, :value=>item.header %>
   <%=text_field :menu_item, :sort, :index=>item.id, :value=>item.sort, :size => 2 %>
   <% item.fields_for :price do |menu_item_price| %>
        <%= menu_item_price.text_field :price %>
   <% end %>

&lt;%end%&gt;

我收到以下错误:

undefined method `fields_for' for #<MenuItem:0x007fec8d9be138> 

我如何迭代以获得价格值?我的模型的设置方式是否意味着默认情况下这些menu_items会有与它们相关的价格记录(甚至是空/空值)?

THX

1 个答案:

答案 0 :(得分:3)

您需要fields_for :price,而不是item.fields_for

有关更完整的示例,请查看模式here

所有菜单项的价格都为空值,除非你明确地给它们一个你可以在before_save回调中做的选择