gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 10:54:06 27 4
gpt4 key购买 nike

我有一个包含以下内容的嵌套属性表单,我正在学习如何使用嵌套属性。我遇到的一个问题是 child_index 值没有增加。我根据 Controller 中的构建得到 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不会有自动增量。这是否是正确的行为是有争议的。如果完全省略 :child_index打电话时fields_for ,你应该得到你想要的索引。

要为每个字段获取正确的标签,您可以使用一些 JavaScript。如果你不喜欢这样,你可以将文件号设置为 Asset 的一个属性。类(class)。

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 %>

关于ruby-on-rails - Rails 3.1 - :fields_for,:child_index 不递增,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7642936/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com