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的未定义方法值".
你需要这样设置:
- @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