2013-09-21 8 views
12

Ich habe versucht, etwas Code herauszufinden. Ich habe ein Formular Ich versuche, die Wicked und Cocoon Juwel zu verwenden. Alles funktioniert, einschließlich der link_to_add_association Funktion. Ich gebe ein partielles für die assoziierten Formularfelder wieder, wie Cocoon es empfiehlt, und alles scheint nur mit Ausnahme der link_to_remove_association Funktion zu funktionieren. Es gibt die folgenden Fehler:Rails Cocoon Gem: Undefinierte Methode 'new_record?' auf link_to_remove_association mit Wicked

nicht definierte Methode new_record? für nil: NilClass

Hier ist mein Teil dass wirft den Fehler:

<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> 

Hier ist die Ansicht, dass die teilweise ruft:

<%= 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 %> 

Hier ist die Controller-Aktion, die die Ansicht ruft:

class UserStepsController < ApplicationController 
    include Wicked::Wizard 

    steps :personal, :locations 

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

Incase es hilft, hier ist die Funktion im Kokon, der den Fehler zu werfen:

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 

Antwort

27

Es stellt sich heraus, dass ich die accepts_nested_attributes_for Methode auf dem Lieferantenmodell vergessen.

+1

hätte ich nie gedacht. Vielen Dank! – Tim