gpt4 book ai didi

ruby-on-rails - Ruby on Rails field_for 表单助手问题

转载 作者:行者123 更新时间:2023-12-01 11:09:50 25 4
gpt4 key购买 nike

我在循环中使用 field_for 表单助手:

<% f.fields_for :permissions do |permission_form| %>
<tr>
<td><%= permission_form.object.security_module.name %><%= permission_form.hidden_field(:security_module_id) %></td>
<td><%= permission_form.object.security_module.description %></td>
<tr>
<% end %>

以上代码的结果输出是这样的:

    <input id="role_permissions_attributes_0_id" name="role[permissions_attributes][0][id]" type="hidden" value="76" />
<tr>
<td>Diary<input id="role_permissions_attributes_0_security_module_id" name="role[permissions_attributes][0][security_module_id]" type="hidden" value="13" /></td>
<td>Access to the Diary Module</td>
</tr>
<!-- next input field then <tr> tag -->

此标记的问题是输入标签落在 tr 标签之外,这会导致 XHTML 的验证问题。

有谁知道如何让 input 标签位于 tr 标签内,从而为我提供有效的 XHTML 1.0 STRICT 标记?

谢谢

最佳答案

如果您查看 Rails 源代码,您会发现这一点。

# in actionpack/lib/action_view/helpers/form_helper.rb
def fields_for_nested_model(name, object, args, block)
if object.new_record?
@template.fields_for(name, object, *args, &block)
else
@template.fields_for(name, object, *args) do |builder|
@template.concat builder.hidden_field(:id)
block.call(builder)
end
end
end

请注意,它直接在此处添加隐藏字段,并且看起来没有任何选项可以更改此行为。最简单的事情可能是创建您自己的自定义表单构建器。

# in lib/no_id_form_builder.rb
class NoIdFormBuilder < ActionView::Helpers::FormBuilder
private
def fields_for_nested_model(name, object, args, block)
@template.fields_for(name, object, *args, &block)
end
end

然后在您的表单中使用它。您需要手动添加 id 字段。

<% f.fields_for :permissions, :builder => NoIdFormBuilder do |permission_form| %>
<tr>
<td>
<%= permission_form.object.security_module.name %>
<%= permission_form.hidden_field(:security_module_id) %>
<%= permission_form.hidden_field(:id) unless permission_form.object.new_record? %>
</td>
<td><%= permission_form.object.security_module.description %></td>
<tr>
<% end %>

您可能需要就此提交灯塔票。也许 :skip_id_field 选项可以用于 fields_for 来执行此操作。

关于ruby-on-rails - Ruby on Rails field_for 表单助手问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1236416/

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