Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Rails中动态生成三层深嵌套表单_Javascript_Ruby On Rails - Fatal编程技术网

Javascript 在Rails中动态生成三层深嵌套表单

Javascript 在Rails中动态生成三层深嵌套表单,javascript,ruby-on-rails,Javascript,Ruby On Rails,我试图使用示例创建一个包含动态生成内容的深度嵌套表单,但是当我尝试进行多个级别的深度嵌套时,我遇到了一些问题,因为内容生成在第一个生成的表单中不止一次,并且在我尝试从生成内容的第二个级别添加字段时不会导致任何事情发生 简化模型布局 Task has_one VendorUpload has_many VendorShippingLogs has_many VendorShippingLogProducts 供应商配送日志产品是我遇到的问题,因为该表单试图在供应商配送日志

我试图使用示例创建一个包含动态生成内容的深度嵌套表单,但是当我尝试进行多个级别的深度嵌套时,我遇到了一些问题,因为内容生成在第一个生成的表单中不止一次,并且在我尝试从生成内容的第二个级别添加字段时不会导致任何事情发生

简化模型布局

Task
  has_one VendorUpload
    has_many VendorShippingLogs
      has_many VendorShippingLogProducts
供应商配送日志产品是我遇到的问题,因为该表单试图在供应商配送日志内容中生成其内容,而供应商配送日志内容本身是动态生成的,我不确定如何将其编码到自己的帮助器中。所附代码

型号-->

应用程序\u helper.rb-->

new.html.erb-->

这里的代码基本上模仿了示例中的所有内容,适用于一个级别的深层嵌套属性,但除此之外的任何内容都不起作用。当我试图点击上面代码中的“添加产品”按钮时,我没有得到任何反馈


我希望我在这里把每件事都说得足够清楚,因为作为一个新手,这是一个很难解释的问题。如果方向正确,我们将不胜感激

这可能值得一试:

$(function() {
  $(document).on('click', 'a.add_child', function() {
    var association, new_id, regexp, template;
    association = $(this).attr('data-association');
    template = $('#' + association + '_fields_template').html();
    regexp = new RegExp('new_' + association, 'g');
    new_id = (new Date).getTime();
    $(this).parent().before(template.replace(regexp, new_id));
    $();
    return false;
  });
});
jQuery中的普通
单击
事件不会绑定到动态生成的内容。您应该在
上使用

def new
  @task = Task.new
  @task.build_vendor_upload.vendor_shipping_logs.build.vendor_shipping_log_products.build

end
private
  def task_params
    params.require(:task).permit!
  end
  def new_child_fields_template(form_builder, association, options = {})
    options[:object] ||= form_builder.object.class.reflect_on_association(association).klass.new
    options[:partial] ||= association.to_s.singularize
    options[:form_builder_local] ||= :f

    content_for :jstemplates do
      content_tag(:div, :id => "#{association}_fields_template", :style => "display: none") do
        form_builder.fields_for(association, options[:object], :child_index => "new_#{association}") do |f|
          render(:partial => options[:partial], :locals => { options[:form_builder_local] => f })
        end
      end
    end
  end

  def add_child_link(name, association)
    link_to(name, "javascript:void(0)", :class => "add_child btn btn-success btn-sm fa fa-plus-circle", :style => "margin-left: 15px;margin-top: 15px;", :"data-association" => association)
  end

  def remove_child_link(name, f)
    f.hidden_field(:_destroy) + link_to(name, "javascript:void(0)", :style => "height: 30px; margin-left: 5px;", :class => "remove_child btn btn-danger fa fa-close")
  end
<%= form_for @task, url: tasks_path, method: :post, :html => {:multipart => true } do |f| %>
  <%= f.fields_for :vendor_upload do |ff| %>
    <%= ff.fields_for :vendor_shipping_logs do |fff| %>
      <%= render "vendor_shipping_log", :f => fff %>
    <% end %>
    <p><%= add_child_link " Add Customer", :vendor_shipping_logs %></p>
    <%= new_child_fields_template f, :vendor_shipping_logs %>
  <% end %>
<% end %>
<div id="jstemplates">
  <%= yield :jstemplates %>
</div>
<%= f.fields_for :vendor_shipping_log_products do |ff| %>
  <%= render "vendor_shipping_log_product", :f => ff %>
<% end %>
<%= new_child_fields_template f, :vendor_shipping_log_products %>
<p><%= add_child_link " Add Product", :vendor_shipping_log_products %></p>

<%= remove_child_link "", f %>
<div class="fields">
  <div class="form-group form-group-sm">
    <%= f.label :item_id, "Item ID:", class: 'col-sm-3 control-label' %>
    <div class="col-sm-9">
      <div style="display: inline-flex;">
        <%= f.text_field :item_id, class: "form-control" %>
      </div>
    </div>
  </div>
  <%= remove_child_link "", f %>
</div>
$(function() {
  $('a.add_child').click(function() {
    var association = $(this).attr('data-association');
    var template = $('#' + association + '_fields_template').html();
    var regexp = new RegExp('new_' + association, 'g');
    var new_id = new Date().getTime();
    $(this).parent().before(template.replace(regexp, new_id));
    $()
    return false;
  });
});
$(function(){
  $(document).on("click", 'a.remove_child', function() {
    var hidden_field = $(this).prev('input[type=hidden]')[0];
    if(hidden_field) {
      hidden_field.value = '1';
    }
    $(this).parents('.fields').hide();
    return false;
  });
});
$(function() {
  $(document).on('click', 'a.add_child', function() {
    var association, new_id, regexp, template;
    association = $(this).attr('data-association');
    template = $('#' + association + '_fields_template').html();
    regexp = new RegExp('new_' + association, 'g');
    new_id = (new Date).getTime();
    $(this).parent().before(template.replace(regexp, new_id));
    $();
    return false;
  });
});