2015-07-21 59 views
0

应用程序是一种会计条目形式,在此特定情况下会进行条目调整。目标行为是用户选择一系列帐户编辑余额;但实际上应用程序会为每个所选帐户创建新条目,然后地图总和会生成余额值。使用上下文相关数据创建多个记录

因此所述控制器从先前的形式

@bilancinos = Bilancino.find(params[:bilancino_ids]) 

调用所选择的帐户和视图调用每个帐户

<%= form_tag create_multiple_bilancinos_path, :method => :put do %> 
    <% @bilancinos.each do |bilancino| %> 
    <%= fields_for "bilancinos[]", bilancino do |f| %> 

这是很大的提取帐户选择

<%= f.hidden_field :operativo_id, :value => bilancino.operativo_id %> 

但金额

<%= f.text_field :amount, :class => "text-right" %> 

被衍生形成源@bilancinos和呈现的HTML

<input class="text-right" id="bilancinos_1457_amount" name="bilancinos[1457][amount]" size="30" type="text" value="8325.22" /> 

试图编辑现有的记录,这是错误的,自然地导致一个undefined method stringify_keys'的‘1457’:String`。 create_multiple动作定义为

@bilancinos = Bilancino.create(params[:bilancinos].keys, params[:bilancinos].values).reject {|p| p.errors.empty? } 

我怀疑我的表单的语法是问题。

回答

0

通过以下方式解决(在这里保留一个跟踪,因为大多数答案与创建/保存多个子记录有关;这是完全创建,但是具有上下文)。

第一控制器操作调用的上下文确定的记录

@bilancinos = Bilancino.find(params[:bilancino_ids]) 

虽然第二控制器操作创建记录

params[:new_bilancinos].each do |keys, values| 
    b = Bilancino.create(values) 
end 

的形式是基于上下文中创建

<%= form_tag create_multiple_bilancinos_path, :method => :put do %> 
    <% @bilancinos.each do |bilancino| %> 

,并使用以下语法生成值

<%= hidden_field_tag "new_bilancinos[#{bilancino.id}][cdg_id]", bilancino.cdg_id %> 
    <%= text_field_tag "new_bilancinos[#{bilancino.id}][amount]", "0", class: "text-right" %> 
    <%= select_tag "new_bilancinos[#{bilancino.id}][natura_id]", options_from_collection_for_select(Natura.order("id DESC").all, "id", "nome", {:selected => 1 }) %> 

其中bilancino.id是实际上只有一个唯一的密钥设定为轨处理的占位符。新的bilancino记录是用他们自己的ID创建的。