【发布时间】:2016-01-04 18:22:33
【问题描述】:
我正在尝试在 Rails 4 中实现一个简单的嵌套模型形式。这可能很简单,但就是想不通。
所以我有一个编辑视图,我在其中创建嵌套字段:
<%= f.fields_for :bankaccounts do |bankaccount| %>
<%= render 'bankaccount_fields', :f => bankaccount %>
<% end %>
这些工作正常,甚至链接:
<%= link_to_add_association 'add', f, :bankaccounts , :class => "link"%>
工作正常。这些字段在单击时显示为应有的样子。
真正的问题是,当我提交表单时。它不会将已输入这些添加字段的参数发送回 Web 服务器。 (在 webrick 控制台的任何地方都看不到它们)表单只提交旧的银行帐户参数:
"bankaccounts_attributes"=>{"0"=>{"iban"=>"121221", "swift"=>"121212", "id"=>"3"}, "1"=>{"iban"=>"33333", "swift"=>"33333", "id"=>"9"}, "2"=>{"iban"=>"121212", "swift"=>"211212", "id"=>"10"}
以上属性应包含四个银行帐户。
FWIW:Turbolinks 也被禁用。
编辑:这是来自 bankaccount_fields 部分的代码:
<div id="tilit">
<div class="area-form">
<div class="col">
<div class="box-row">
<label for="iban" class="label">Iban</label>
<div class="input-row no-italic">
<%= f.text_field :iban, :id => "iban", :class => "input-text" %>
</div>
</div>
</div>
<div class="col">
<div class="box-row">
<label for="swift" class="label">Swift</label>
<div class="input-row no-italic">
<%= f.text_field :swift, :id => "swift", :class => "input-text" %>
</div>
</div>
</div>
</div>
编辑:调试器输出 reg。参数:
(rdb:2) @_params {"utf8"=>"✓", "_method"=>"patch", "authenticity_token"=>"181xsndllcPmpvpMaDi70IXh8SpaSYxs0eiSo19qwfI=", "producer"=>{"name"=>"Anne", "RH_nro"=>" ", "ytunnus"=>"", "prepaymentpercentage"=>"", "streetaddress"=>"", "zip"=>"", "city"=>"", "www"=>"", "bankaccounts_attributes"=>{"0"=>{"iban"=>"13123123", "swift"=>"121212", "id"=>"3"}, "1"=>{"iban"= >"33333", "swift"=>"33333", "id"=>"9"}, "2"=>{"iban"=>"121212", "swift"=>"211212", "id "=>"10"}}}, "commit"=>"TALLENNA", "action"=>"update", "controller"=>"producers", "id"=>"54"}
应该多包含一条bankaccount_attributes 记录,但只包含非动态添加的记录。
我已经摸索了好几个小时了,所以任何帮助都将不胜感激。
如果问题形成不好也很抱歉,这是我的第一个:)
【问题讨论】:
-
您能否包含您的 link_to_add_association 方法以及将字段插入表单的代码?当插入一个新的输入字段时,如果你在浏览器中检查它,它的元素 id 是什么?
-
应该指定 link_to_add_association 来自 cocoon gem 的这个特定示例。但是在使用 nested_forms gem 或 railscasts #196 嵌套模型示例时,同样的问题仍然存在。添加了浏览器源代码视图的屏幕截图。
-
这看起来可以将值下载到服务器。如果您使用调试器 gem 并临时在控制器操作中添加
debugger语句,则可以检查是否正在传递参数。当您到达断点时,您可以查看params[:producer][:bankaccounts_attributes]中的内容。如果那里出现了正确的值,请查看下面@Rich Peck 的建议。 -
添加了调试器的输出。看来参数并没有像我原先想的那样提交到服务器。
-
当你的 JavaScript 插入新的输入字段时,它们是包含在
标签: ruby-on-rails nested-forms