我有一个嵌套的属性形式与以下,我只是学习如何使用嵌套属性.我遇到的一个问题是child_index值没有递增.我根据控制器中的构建得到3个字段,但它们都有0或1,具体取决于设置的数字.
有关如何使其增加的任何想法?
# in controller: 3.times {@item.assets.build} <% number = 1 %> <div id='files'> <%= f.fields_for :assets,:child_index => number do |asset| %> <p> number:<%= number %><br /> <%=asset.label :asset,"File ##{number += 1}" %> <%= asset.file_field :asset %> </p> <% end %> </div> <%= f.submit %>
编辑:
所以在html中所有这些都将具有如下形式:
item[assets_attributes][0][asset]
而不是期望的:
menu_item[assets_attributes][0][asset] menu_item[assets_attributes][1][asset] menu_item[assets_attributes][2][asset]
编辑#2:
所以通过源代码查看,我看到以下内容并且想知道rails是否应该进行一些自动交换,并且可能没有发生这种情况;
<input id="item_assets_attributes_0_asset" name="item[assets_attributes][0][asset]" type="file" /> <input id="item_assets_attributes_0_id" name="item[assets_attributes][0][id]" type="hidden" value="1" />
解决方法
通过Rails源查看,很明显,如果指定:child_index,则不会有自动增量.这是否是正确的行为是值得商榷的.如果在调用fields_for时完全省略:child_index,则应该获得所需的索引.
要为每个字段获取正确的标签,您可以使用一些JavaScript.如果您不喜欢,可以将文件编号设置为Asset类的属性.
class Asset < AR attr_accessor :file_number end # in controller: 3.times {|n| @item.assets.build(:file_number => n) } <div id='files'> <%= f.fields_for :assets do |asset| %> <p> <%=asset.label :asset,"File ##{asset.file_number}" %> <%= asset.file_field :asset %> </p> <% end %> </div> <%= f.submit %>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。