Rails 4.视图中的两个模型。第二个模型中的对象数量未知

时间:2014-05-08 05:47:19

标签: ruby-on-rails ruby rails-activerecord rails-models

我有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对象。

我该如何解决这个问题?

1 个答案:

答案 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)
});

这将允许您添加任意数量的字段。它是我们所拥有的简单版本,但应该对您有所帮助。当然,如果您需要任何帮助/澄清,我可以修改!