2017-07-06 4 views
0

Ich habe ein Buchungssystem, das Kommentare ermöglicht. Ich bin ein Benachrichtigungssystem zu machen und bin immer diese Fehlermeldung:undefined Methode `Benutzer 'für Nil: NilClass

NoMethodError in CommentsController # erstellen nicht definierte Methode `Benutzer für nil: NilClass

Ich denke, dass Benutzer als Post-Attribut definiert ist, und ich Ich rufe die Post an, damit es okay sein sollte. Hier

ist die create-Methode

def create 
    @comment = Comment.new(comment_params) 
    @comment.user_id = current_user.id 
    respond_to do |format| 
     if @comment.save 
     create_notification @post 
     format.html { redirect_to request.referer, notice: 'Comment was successfully created.' } 
     format.json { render :show, status: :created, location: @comment } 
     else 
     format.html { render :new } 
     format.json { render json: @comment.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

Es sollte beachtet werden, dass ich nach einer Anleitung für einen Teil davon, und es hatte orginially die Zeile „create_notification @post, @comment“, aber das erzeugt eine Argumentfehler später. Hier

ist die Methode create_notification, die Fehler in der zweiten Zeile sind

def create_notification(post) 
     return if post.user.id == current_user.id 
     Notification.create(user_id: post.user.id, 
         notified_by_id: current_user.id, 
         post_id: post.id, 
         comment_id: comment.id, 
         notice_type: 'comment') 
    end 

Es beginnt bei der zweiten Zeile, und wenn auf Kommentar, geht es weiter zu den nächsten Zeilen. Hier

ist die App Spur

app/controllers/comments_controller.rb:71:in `create_notification' 
app/controllers/comments_controller.rb:33:in `block in create' 
app/controllers/comments_controller.rb:31:in `create' 
+0

Sie übergeben '@ post' an Ihre' create_notification' Methode, aber wo definieren Sie '@ post'? – mmichael

+0

Nun, ein Kommentar ist mit einem Beitrag verbunden, nicht das gleiche, aber ich nahm an, das wäre genug. Dies ist Teil des neuen Kommentarformulars: <% = f.hidden_field: post_id,: value => @ post.id%>. Sie sind auch in ihren Modellen assoziiert. – MaxLeoTony

+0

Sie wissen, was passiert, wenn Sie davon ausgehen? Ihre Methode erwartet ein Argument. In diesem Fall ein Post-Objekt. Sie übergeben jedoch null, da @ post nicht definiert ist. In diesem Zusammenhang hat Ihr Formular auch nichts damit zu tun, was Sie an Ihre create_notification-Methode übergeben. – mmichael

Antwort

1

NoMethodError in CommentsController#create undefined method `user' for nil:NilClass

In create_notification @post, @post ist nil Stellen Sie sicher, @post definiert haben. Zum Beispiel @post = Post.find(params[:comment][:post_id])

Verwandte Themen