Ich erhalte immer eine undefined method 'comments' for nil:NilClass
in meiner create-Methode, wenn ich versuche, einen neuen Kommentar (polymorphe Beziehung) zu erstellen. Ich habe einige andere Fragen dazu gelesen und kann nicht herausfinden, was mit meinem Formular/Controller falsch ist.find_commentable gibt undefinierte Methode `comments 'für nil zurück: NilClass
Hier ist mein generischer Teil für Bemerkungen:
<%= form_for [@commentable, Comment.new] do |f| %>
<%= f.text_area :content %>
<%= f.submit "Post" %>
<% end %>
Bitte beachten Sie, dass dies in meiner traveldeal/show Seite gerendert wird. Das Formular ist in Ordnung. Wenn ich die form_for ändern Parameter [@commentable, @comment]
passieren, erhalte ich die Fehler undefined method
model_name‘für NilClass: CLASS`
routes.rb
resources :users
resources :traveldeals
resources :traveldeals do
resources :comments
end
resources :users do
resources :comments
end
Die Railscasts hat die oben als resources :traveldeals, :has_many => :comments
geschrieben, aber ich glaube, das ist datierte Syntax.
comments_controller.rb
class CommentsController < ApplicationController
before_filter :authenticate, :only => [:create, :destroy]
def new
@comment = Comment.new
end
def create
@commentable = find_commentable
@comment = @commentable.comments.build(params[:comment])
@comment.user_id = current_user.id
if @comment.save
flash[:success] = "Successfully saved comment."
redirect_to root_path
else
redirect_to current_user
end
end
private
def find_commentable
params.each do |name, value|
if name =~ /(.+)_id$/
return $1.classify.constantize.find(value)
end
end
nil
end
end
Edit: Hinzugefügt wurde die Lösung so den obigen Code funktioniert für mich.
Danke, dass Sie mich auf Ihre andere Antwort verwiesen haben, Mischa. Ich habe @commentable für die Seite definiert, auf der form_for angezeigt wird, aber jetzt werde ich an den fehlgeschlagenen Pfad (current_user) weitergeleitet, wenn ich das Formular absende, sodass mein Kommentar nicht gespeichert wird. – Huy
Was meinen Sie mit "fehlgeschlagener Pfad (current_user)"? Es kann etwas mit dem 'before_filter' in Ihrem Kommentar-Controller zu tun haben ... sind Sie noch eingeloggt? – Mischa
Ich meinte, dass mein Kommentar nicht gespeichert wird (so wie ich es in meinem Controller eingerichtet habe, werde ich zu current_user weitergeleitet, wenn es fehlschlägt). Ja, ich bin angemeldet, wenn ich versuche, den Kommentar zu erstellen. – Huy