我试图一次向订单添加多个产品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"=>""}}
答案 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 %>