Immer undefined method `klass' for nil:nilclass - Railscast #197
Hallo alle, ich folgte Ryan Bates' railscasts auf geschachtelte Modelle und form, aber ich bekomme immer "undefined method `klass' for nil:nilclass. Ich bin mir ziemlich sicher, dass es aufgrund der link_to_add_fields da war alles arbeiten vor. Unten ist mein Fehler und andere relevante code, und ich bin mit Rails 3.1. Ich habe viel gegoogelt und habe keine gefunden um mein problem zu lösen, also, wenn Euch könnte mir helfen, ich würde wirklich zu schätzen es. Vielen Dank für Ihre Hilfe.
_form.html-Code.erb
<%= form_for(@organization) do |f| %>
<% if @organization.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@organization.errors.count, "error") %> prohibited this organization from being saved:</h2>
<ul>
<% @organization.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= f.label :name %><br />
<%= f.text_field :name %>
</div>
<div id="restaurant_field" class="field">
<%= f.fields_for :restaurants do |builder| %>
<%= render 'organizations/partials/restaurant_fields', :f => builder %>
<% end %>
</div>
<div class="actions"><%= f.submit %></div>
<% end %>
_restaurant_fields.html-Code.erb
<p class="fields">
<%= f.label :name, "Restaurant Name" %><br />
<%= f.text_field :name %>
<%= link_to_remove_fields "Remove", f %>
application_helper.rb
module ApplicationHelper
def link_to_remove_fields(name, f)
f.hidden_field(:_destroy) + link_to_function(name, "remove_fields(this)")
end
def link_to_add_fields(name, f, association)
new_object = f.object.class.reflect_on_association(association).klass.new
fields = f.fields_for(association, new_object, :child_index => "new_#{association}") do |builder|
render(association.to_s.singularize + "_fields", :f => builder)
end
link_to_function(name, h("add_fields(this, \"#{association}\", \"#{escape_javascript(fields)}\")"))
end
end
application.js
function remove_fields(link) {
$(link).prev("input[type=hidden]").val("1");
$(link).closest(".fields").hide();
}
function add_fields(link, association, content) {
var new_id = new Date().getTime();
var regexp = new RegExp("new_" + association, "g");
$(link).parent().before(content.replace(regexp, new_id));
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Fand ich, dass die link_to_add_fields Helfer nicht funktionieren, wenn das zugehörige Modell beschreiben durch eine has_one. Die has_one bedeutet, dass der Verein nicht die klass Objekt.
Können Sie bestimmen, das ist Ihr problem, indem Sie Ihre Beziehung zu has_many :Objekt + s (Ihr Objekt name mit einem s) und übergeben Ihr Objekt im plural zu link_to_add_fields.
Haben Sie das gleiche getan, wie diese person hier
Edit: (mein Fehler)
Ich bin angenommen, Sie haben eine link_to_add_fields unterhalb dieser Linie
als es scheint, dass die _restaurant_fields.html-Code.erb teilweise unvollständig ist. (kein End-tag)
Entfernen Sie die link_to_add_fields außerhalb von f.fields_for
Sollte lösen die klass Fehler.