分组和fields_for

Kri*_*ris 5 fields-for ruby-on-rails-3

我正在尝试创建一个表单,允许我为关联输入分组的关联提交新记录.

   class Product < AR::Base
     has_many :properties
     accepts_nested_attributes_for :properties
   end
Run Code Online (Sandbox Code Playgroud)

请注意,在控制器中,为产品构建了一系列属性,因此@product.properties.empty? # => false.

下面fields_for给出了正确的输入,例如product[properties_attributes][0][value].

= form.fields_for :properties do |pform|                                                                                                                               
  = pform.input :value
Run Code Online (Sandbox Code Playgroud)

但是一旦我尝试对关联进行分组,它就不再生成具有正确名称的输入:

- @product.properties.group_by(&:group_name).each do |group_name, properties|
  %h3= group_name                                                       
  = form.fields_for properties do |pform|                                                                                                                               
    = pform.input :value
Run Code Online (Sandbox Code Playgroud)

这创建了name属性的输入,product[product_property][value]实际上它应该是product[property_attributes][0][value]第一个例子.

Rails文档建议您可以这样做:

= form.fields_for :properties_attributes, properties do |pform|
Run Code Online (Sandbox Code Playgroud)

但这会给出错误"Array的未定义方法值".

Pio*_*ski 7

你需要这样设置:

- @product.properties.group_by(&:group_name).each do |group_name, properties|
  %h3= group_name
  = form.fields_for :properties, properties do |pform|
    = pform.text_field :value
Run Code Online (Sandbox Code Playgroud)

它应该工作正常,因为你有accepts_nested_attributes_for :properties铁杆知道它应该为其创建字段properties_attributes.此外,attr_accessible :properties_attributes如果您使用的是最新的Rails,并且尚未将其添加到模型中,则可能需要添加 ;)

此外,如果您想根据单个属性做出一些决定,您也可以使用以下表单:

- @product.properties.group_by(&:group_name).each do |group_name, properties|
  %h3= group_name
  - properties.each do |property|
    = form.fields_for :properties, property do |pform|
      = pform.text_field :value
Run Code Online (Sandbox Code Playgroud)

这两个都在这里很好地描述:http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-fields_for under One-To-Manysection