【问题标题】:Rails - creating multiple records, not all params are being passedRails - 创建多个记录,并非所有参数都被传递
【发布时间】:2012-03-17 03:22:41
【问题描述】:

我正在尝试一次将多个产品 sku 添加到订单中。

产品有_many sku, 订单 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"=>""}}

【问题讨论】:

    标签: ruby-on-rails forms params


    【解决方案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 %>
    

    【讨论】:

    • 谢谢!我认为 fields_for 是当您使用多个模型时,所以感谢您清除它,我将使用它们:)
    • fields_for 比他们看起来的要多得多!几乎所有你为fields_for 嵌套的属性都在那里!这是另一个有趣的 fields_for 案例是微妙的
    猜你喜欢
    • 2021-04-01
    • 1970-01-01
    • 2018-09-07
    • 1970-01-01
    • 1970-01-01
    • 2021-09-01
    • 2012-06-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多