应用程序是会计分录的一种形式,在这种特殊情况下,会计分录调整。目标行为是用户选择一系列帐户来编辑余额;然而,在实践中,应用程序为每个选定的帐户创建新条目,然后映射和和生成余额值。
因此,控制器从以前的表单中调用选定的帐户。
@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 methodstringify_keys‘为“1457:String`”。create_multiple操作定义为
@bilancinos = Bilancino.create(params[:bilancinos].keys, params[:bilancinos].values).reject {|p| p.errors.empty? }我怀疑我表单的语法是问题所在。
发布于 2015-07-22 08:30:06
解决方法如下(在这里保持跟踪,因为大多数答案都与创建/保存多个子记录有关;这是直接创建,但具有上下文)。
第一个控制器操作调用上下文确定的记录。
@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实际上只是作为rails处理占位符的唯一键集。使用自己的ID创建新的bilancino记录。
https://stackoverflow.com/questions/31545538
复制相似问题