Rails - создание нескольких записей, не все параметры передаются - PullRequest
0 голосов
/ 17 марта 2012

Я пытаюсь добавить несколько заказов продукта к заказу одновременно.

Продукт имеет много мужчин, Order has_many order_lines

Итак, в моем заказе я поднимаю продукт и вижу все его скусы (коричневый-маленький, коричневый-большой), затем я ввожу количество каждого, которое я хочу поставить в заказ.

По какой-то причине он передает только параметры: 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 Ответ

1 голос
/ 17 марта 2012

В этой строке задается ключ, с которым у вас возникают проблемы

text_field_tag "order_lines[#{index}]"

Таким образом, в основном вы говорите order_lines[X] =, и, поскольку :qty_sold является последним параметром, установленным для этого ключа, ему назначаетсяэто значение.

Чтобы выполнить то, что вы пытаетесь достичь, вам нужно пойти на уровень глубже, как это

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

Честно говоря, вы должны рассмотреть fields_for помощник он делает все, что вы хотите сделать, и является более абстрактным.

Это не проверено, но я думаю, что это должно работать

<% @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 %>
...