对于rails中的个人发票应用,我可以对以下内容使用一些建议:在新的发票表单中,如何动态添加由products
的collection_select和{{1}的关联text_field组成的新行点击amount
?
由于一张发票有很多产品且产品有很多发票,我认为这是一种HABTM关系。因此,我创建了表add new product
,invoices
及其连接表products
。
我希望invoices_products
页面有一个表单,用户可以使用collection_select来挑选产品(所有产品都已预先加载到invoices/new
表中)并填写金额它背后的文字字段。
用户应该能够通过点击products
来复制这两个字段(collection_select和text_field),例如add new product
。
现在我该怎么做呢?我会在RailsCast #403 Dynamic Forms 04:50
text_field中放置哪个表格,因为每张发票有多个产品,因此有多个金额?
非常感谢正确方向的任何答案!
答案 0 :(得分:0)
这取决于您想要的其他字段数
可以找到一个很好的教程here
<强>的Ajax 强>
正确的方法是使用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 %>