ruby-on-railscocoon-gem

Cocoon Gem is rendering form twice


I am using Cocoon Gem to build dynamic form. Every thing is working fine. I am able to add new record, delete the records. But my form and submit button is getting displayed twice. I have checked application.html.erb layout file and I haven't added coccon in my Layout file.

The way I added coccon gem is I added gem coccon in Gemfile and then I added coccon using yarn yarn add @nathanvda/cocoon and added following line in application.js file

require("jquery")
require("@nathanvda/cocoon")

My form view looks like below (this is the form which is getting displayed twice)

<%= form_with model: @user do |f| %>
  <%= f.fields_for :work_experiences do |work_experience| %>
    <div id='work_experiences'>
       <%= render "work_experience_fields", f: work_experience %>
    </div>
    <%= link_to_add_association 'add more work experience', f, :work_experiences, data: { association_insertion_node: '#work_experiences', association_insertion_method: :append } %>
            
    <%= f.submit 'Update Work Experience' %>
  <% end %>
<% end %>

My partial _work_experience_fields looks like below:

  <%= f.label :job_tile, 'Job Title'  %>
  <%= f.text_field :job_title, placeholder: 'Enter Job Title' %>
  <%= f.label :company_name, 'Company Name'  %> 
  <%= f.text_field :company_name, placeholder: 'Enter Company Name' %>
  <%= link_to_remove_association "remove task", f %>

Please help me debug why my form is displayed twice.


Solution

  • Your Form should look like this: Basically, you need to close the fields_for loop.

    <%= form_with model: @user do |f| %>
        <div id='work_experiences'>
           <%= f.fields_for :work_experiences do |work_experience| %>
              <%= render "work_experience_fields", f: work_experience %>
           <%end%>
       </div>
       <%= link_to_add_association 'add more work experience', f, 
           :work_experiences, data: { association_insertion_node: 
        '#work_experiences', association_insertion_method: :append } %>
            
      <%= f.submit 'Update Work Experience' %>
       
      <% end %>