1

Rails の個人的な請求書作成アプリの場合、次のようなアドバイスを使用productsできamountますadd new product

1 つの請求書には多くの製品があり、1 つの製品には多くの請求書があるため、これは双方向の HABTM 関係であると考えました。したがって、テーブルinvoicesproducts、およびそれらの結合テーブルを作成しましたinvoices_products

invoices/newユーザーが collection_select を使用して製品を選択し (すべての製品が既にproductsテーブルにプリロードされています)、その背後にあるテキスト フィールドに金額を入力できるフォームがページにあることを望みます。add new productユーザーは、のように をクリックして、これら 2 つのフィールド (collection_select と text_field) を複製できる必要がありますRailsCast #403 Dynamic Forms 04:50

どうすればそれを行うことができますか?amountまた、請求書ごとに複数の製品があり、複数の金額があるため、text_fieldからのデータをどのテーブルに配置しますか?

正しい方向への回答は大歓迎です!

4

1 に答える 1

0

これは、必要な追加フィールドの数によって異なります

このための優れたチュートリアルはここにあります


アヤックス

正しい方法は、Ajax を使用して要素を動的に追加することです。

form_builderこれは、動的に追加されたアイテムにオブジェクトを使用できないことを意味するため、注意が必要です。とにかく、このコードでそれを行うことができます:

#config/routes.rb
get "new_field_path", to: "invoices#new_item"

#app/views/controller/index.html.erb
<%= ... form %>
<%= link_to "Add Field", new_field_path, remote: :true %>

コントローラ

#app/controllers/invoices_controller.rb
def new_item
   @invoice = Invoice.new
   @invoice.products.build
   render "new_item", layout: false
end

#app/views/invoices/new_item.html.erb
<%= form_for @invoice do |f| %>
    <%= render partial: "products_fields", locals: { f: f } %>
<% end %>

#app/views/invoices/_products_fields.html.erb
<%= f.fields_for :products, child_index: Time.now.to_i do |p| %>
    <%= p.text_field :name %>
<% end %>

#app/views/invoices/new.html.erb
<%= form_for @invoice do |f| %>
   <%= render partial: "products_fields", locals: { f: f } %>
   <%= link_to "Add Field", new_field_path, remote: :true %>
   <%= f.submit %>
<% end %>
于 2014-03-21T12:12:23.460 に答える