加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Rails 3.1 – :fields_for,:child_index不递

发布时间:2020-12-17 02:16:06 所属栏目:百科 来源:网络整理
导读:我有一个嵌套的属性形式与以下,我只是学习如何使用嵌套属性.我遇到的一个问题是child_index值没有递增.我根据控制器中的构建得到3个字段,但它们都有0或1,具体取决于设置的数字. 有关如何使其增加的任何想法? # in controller: 3.times {@item.assets.build}
我有一个嵌套的属性形式与以下,我只是学习如何使用嵌套属性.我遇到的一个问题是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 %>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读