Rails - 创建多个记录,而不是所有参数都被传递

时间:2012-03-17 03:22:41

标签: ruby-on-rails forms params

我试图一次向订单添加多个产品skus。

产品has_many skus, 订单has_many order_lines

所以在我的订单中,我拉出一个产品并看到它的所有skus(棕色 - 小,棕色 - 大)我然后输入每个我想要订购的数量。

由于某种原因,它只传递:qty_sold参数,而不是:sku_id - 任何理由?

路线:

post   '/order_lines/create' => 'order_lines#create', :as => :create_order_lines

形式:

<%= form_tag create_order_lines_path do %>

        <%= hidden_field_tag :order_id, @order.id %>

        <% @product.first.skus.each_with_index do |sku, index| %>
            <%= text_field_tag "order_lines[#{index}]", :sku_id, {:value => sku.id }  %>
            <%= sku.colour %>
            <%= text_field_tag "order_lines[#{index}]", :qty_sold, {:value => ''}  %>
        <% end %>

        <%= submit_tag "Add" %>

<% end %>

输出:

Started POST "/order_lines/create" for 127.0.0.1 at Fri Mar 16 23:13:27 -0400 2012
  Processing by OrderLinesController#create as HTML
  Parameters: {"commit"=>"Add", "order_id"=>"1", "authenticity_token"=>"JmImxbFUGLdM6Vt0rrS9RabSCUi1kV2QRTpWp34BBb4=", "utf8"=>"\342\234\223", "order_lines"=>{"0"=>"7", "1"=>"8", "2"=>"", "3"=>"9", "4"=>"", "5"=>""}}

1 个答案:

答案 0 :(得分:1)

这一行是设置您遇到

问题的关键
text_field_tag "order_lines[#{index}]"

所以基本上你说order_lines[X] =,因为:qty_sold是设置到该键的最后一个选项,它会被赋予该值。

要完成你想要完成的任务,你需要更深层次,比如

<%= text_field_tag "order_lines[#{index}][qty_sold]", :qty_sold, {:value => ''}  %>

老实说,你应该考虑调查fields_for helper它会做你想完成的一切,而且更抽象。

这是未经测试的,但我认为它应该可行

<% @product.skus.each do |sku| %>
  <%= fields_for :order_lines do |order_line_fields| %>
    <%= order_line_fields.text_field :sku_id, {:value => sku.id} %>
    <%= sku.colour %>
    <%= order_line_fields.text_field :qty_sold %>
  <% end %>
<% end %>