应用程序是会计分录的一种形式,在此特定情况下是条目调整。目标行为是用户选择一系列帐户来编辑余额;但实际上,应用程序会为每个选定的帐户创建新条目,然后 map 和 sum 生成余额值。
因此,控制器从之前的表单中调用所选帐户
@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" />
正在尝试编辑现有记录,这是错误的并自然导致{14}的undefined method
stringify_keys':String`。 create_multiple操作定义为
@bilancinos = Bilancino.create(params[:bilancinos].keys, params[:bilancinos].values).reject {|p| p.errors.empty? }
我怀疑我的表单的语法是问题。
答案 0 :(得分: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 几乎只有一个唯一键设置为rails处理的占位符。使用自己的ID创建新的bilancino记录。