2

我正在尝试在 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" , "控制器"=>"生产者", "id"=>"54"}

应该多包含一条 bankaccount_attributes 记录,但只包含那些不是动态添加的。

我已经挠了好几个小时了,所以任何帮助都将不胜感激。

如果问题形成不好也很抱歉,这是我的第一个:)

4

2 回答 2

1

我发现我的应用程序存在问题,如果不知道是否有人觉得这不再有用。

我猜你已经在 HTML 表中写了你的 form_for (这就是我所做的)。如果是这样,浏览器会生成不一致的 DOM。如果您动态生成表单输入,除非您通过表单选择器选择它,否则它不会将其放入表单中。所以解决方案是将表单放在 HTML 表格之外。

于 2015-03-06T13:42:38.053 回答
0

您的强大参数和控制器是什么样的?

对于嵌套属性,它们应该是这样的:

def params
    params.require(:form_for_variable).permit(bankaccounts_attributes: [:iban, :swift])
end

此外,您需要accepts_nested_attributes_for :bankaccounts在您提交表单的模型中包含

于 2013-10-12T17:27:22.117 回答