2013-09-21 8 views
12

Ho cercato di ottenere del codice capito. Ho un modulo che sto cercando di utilizzare la gemma Wicked e Cocoon. Tutto funziona, inclusa la funzione link_to_add_association. Sto facendo il rendering parziale per i campi modulo associati proprio come Cocoon consiglia, e tutto sembra funzionare solo per trovare tranne la funzione link_to_remove_association. Si restituisce il seguente errore:Rails Cocoon Gem: Metodo non definito 'new_record?' su link_to_remove_association con Wicked

metodo non definito new_record? per nil: NilClass

Ecco la mia parziale che sta gettando l'errore:

<div class="nested-fields"> 
    <div> 
    <%= f.input :address1 %> 
    </div> 
    <div> 
    <%= f.input :address2 %> 
    </div> 
    <div> 
    <%= f.input :city %> 
    </div> 
    <div> 
    <%= f.input :state %> 
    </div> 
    <div> 
    <%= f.input :postal %> 
    </div> 
    <div> 
    <%= link_to_remove_association "remove task", f %> 
    </div> 
</div> 

Qui è la vista che chiama il parziale:

<%= simple_form_for @vendor, url: wizard_path do |f| %> 
    <div id="locations"> 
     <%= f.simple_fields_for :locations do |location| %> 
     <%= render 'location_fields', :f => location %> 
     <% end %> 
     <div class="links"> 
     <%= link_to_add_association 'add location', f, :locations %> 
     </div> 
    </div> 

    <div class="actions"> 
     <%= f.submit "Continue" %> 
    </div> 
<% end %> 

Ecco l'azione di controllo che chiama la vista:

class UserStepsController < ApplicationController 
    include Wicked::Wizard 

    steps :personal, :locations 

    def show 
    @vendor = current_vendor_user.vendor 
    @vendor.locations.build 
    render_wizard 
    end 

Incase aiuta, qui è la funzione in bozzolo che sta gettando l'errore:

def link_to_remove_association(*args, &block) 
    if block_given? 
    f   = args.first 
    html_options = args.second || {} 
    name   = capture(&block) 
    link_to_remove_association(name, f, html_options) 
    else 
    name   = args[0] 
    f   = args[1] 
    html_options = args[2] || {} 

    **is_dynamic = f.object.new_record?** 
    html_options[:class] = [html_options[:class], "remove_fields #{is_dynamic ? 'dynamic' : 'existing'}"].compact.join(' ') 
    hidden_field_tag("#{f.object_name}[_destroy]") + link_to(name, '#', html_options) 
    end 
end 

risposta

27

Si scopre che ho dimenticato il metodo accepts_nested_attributes_for sul modello del fornitore.

+1

Non l'avrei mai immaginato. Grazie! – Tim

Problemi correlati