使用与上下文相关的数据创建多个记录

时间:2015-07-21 17:15:42

标签: forms ruby-on-rails-3.2

应用程序是会计分录的一种形式,在此特定情况下是条目调整。目标行为是用户选择一系列帐户来编辑余额;但实际上,应用程序会为每个选定的帐户创建新条目,然后 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? }

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

1 个答案:

答案 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记录。