我有2个模型,例如model_1和model_2 Model_1 has_many model_2。
对于model_1,我有" new"和"创造"动作和两个模型的创建对象的一个视图。
在视图中,我使用" form_for"对象model_1和" fields_for"对象模型_2。使用model_2的一个对象,一切正常。
但我的问题是我不知道model_2用户想要创建多少个对象。也许是一个或者5个。我希望用户可以使用一个视图创建对象,而不是创建第一个model_1对象,然后创建model_2对象。
我该如何解决这个问题?
答案 0 :(得分:0)
您提出的问题非常合理,并且之前已经使用过这些资源:
执行此操作的最重要方法是您需要使用Javascript将新元素附加到表单。然后,这可以与accepts_nested_attributes_for
一起提交数据作为一个元素
我们之前已经这样做了 - 秘诀是使用child_index: Time.now.to_i
,这里的代码是:
<强>控制器强>
#app/controllers/model1_controller.rb
Class Model1Controller < ApplicationController
def new
@model1 = Model1.new
@model1.build_model2
respond_to do |format|
format.html
format.js { render "add_field" }
end
end
end
查看强>
#app/views/model1/new.html.erb
<%= form_for @model1 do |f| %>
<%= f.text_field :attribute %>
<%= render partial: "fields_for", locals: { child_index: Time.now.to_i } %>
<%= link_to "Add Field", model1_new_path, remote: true, id: "add_field" %>
<%= f.submit %>
<% end %>
#app/views/model1/add_field.html.erb
<%= form_for @model1 do |f| %>
<%= render partial: "fields_for", locals: { child_index: Time.now.to_i } %>
<% end %>
<强>的Javascript 强>
#app/assets/javascripts/application.js
$("#add_field").on("ajax:success", function(data) {
$("new_form").append(data); // VERY simplistic (can be improved upon request)
});
这将允许您添加任意数量的字段。它是我们所拥有的简单版本,但应该对您有所帮助。当然,如果您需要任何帮助/澄清,我可以修改!