0

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

假设我有 3 个用户和 4 个产品。我想要一个 3 x 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.

4

1 回答 1

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]etc. 的形式出现,这就是 Rails 通常处理提交多个对象的方式。参数如下:

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

这有点奇怪,但它的外观。我似乎记得在使用这种技术与尽可能多的嵌套级别时遇到问题,但它应该有助于给你一些想法。

于 2013-05-12T20:33:42.190 回答