多个用户的多个表单的多个输入字段

时间:2013-05-12 12:41:08

标签: ruby-on-rails forms haml simple-form

我正在尝试创建一个小型会计系统。我在这里有一些产品。每个月我都想记下每个用户购买的每种产品的数量。

假设我有3个用户和4个产品。我想要一个3乘4的表,左边是所有用户名,顶部是产品。在每个领域,我希望能够写出用户购买的特别项目中有多少。

我尝试过以下操作,但字段不是唯一的,因此只提交最后一个字段。我该怎么办?

= simple_form_for(:lines, url: lines_url) do |f|
  - @users.each do |user|
    tr
      td= user.name
      - @products.each do |product|
        td
          = f.fields_for user do |u|
            = u.fields_for product do |p|
              = p.fields_for Line.new do |l|
                = l.text_field :quantity

编辑:

我发现这也会起作用,不管怎样,它是相当hackish:

= simple_form_for(:lines, url: lines_url) do |f|
  - @users.each do |user|
    tr
      td= user.name
      - @products.each do |product|
        td
          = text_field :lines, "#{user.id}][#{product.id}"

请注意][中的text_field

1 个答案:

答案 0 :(得分:1)

我已经有过几次这个问题了,并提出了这个问题:

= simple_form_for(:lines, url: lines_url) do |f|
  - @users.each_with_index do |user, index|
    %tr
      %td= user.name
      - @products.each do |product|
        %td
          = f.fields_for user do |u|
            = u.fields_for index do |u|
              = u.fields_for product do |p|
                = p.fields_for Line.new do |l|
                  = l.text_field :quantity

fields_for index表示它出现为lines[user][0][product][line]等,这就是Rails通常处理提交多个对象的方式。 params进来如下:

{
  "0" => some_data,
  "1" => some_other_data
}

这有点奇怪,但它是如何看的。我似乎记得在使用这种技术时遇到的问题与你所拥有的嵌套级别一样多,但它应该有助于给你一些想法。