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

編集:

これも機能することがわかりましたが、かなりハックです:

= 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

これは、Rails が通常、複数のオブジェクトを送信する際に処理する方法である etc.fields_for indexとして出力されることを意味します。lines[user][0][product][line]パラメータは次のようになります。

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

これは少し奇妙ですが、どのように見えるかを示しています。この手法をネストのレベルと同じ数で使用すると問題が発生したことを覚えているようですが、いくつかのアイデアを得るのに役立つはずです.

于 2013-05-12T20:33:42.190 に答える