2015-07-21 45 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創建的。