2016-08-09 40 views
0

Ich arbeite seit vielen Stunden daran und habe mehrere Male (von einem Backup-Punkt aus) versucht, das Problem zu lösen.Benutzerzuordnung hinzugefügt, aber immer noch "undefinierte Methode"

Ich versuche, Kommentare zu den Beiträgen hinzuzufügen. Kommentare funktionieren gut, es werden der Benutzername und der Avatar angezeigt, die nicht funktionieren. Hier ist, was ich Schritt für Schritt gemacht habe.

1) rails g model Comment body:text user:references post:references

2) überprüft, dass das Modell I

class Comment < ApplicationRecord 
    belongs_to :user 
    belongs_to :post 
end 

3) rake db:migrate

4) hinzugefügt has_many :comments, dependent: :destroy sowohl user.rb und post.rb

korrekt war

5) Hinzugefügt resources :comments zu meinen Routen.

resources :posts do 
    resources :comments 
    member do 
     post '/like' => 'posts#like' 
    end 
    end 

6) generierten Kommentaren Controller rails g controller comments

7) den Bemerkungen zu dem Controller Kommentare Altered:

class CommentsController < ApplicationController 
    def create 
    @post = Post.find(params[:post_id]) 
    @comment = @post.comments.create(params[:comment].permit(:body)) 
    @comment.user = current_user 
    if @comment.save 
     redirect_to post_path(@post) 
    else 
     # something else 
    end 
    end 
end 

8) schuf zwei partials "_comment.html.erb" und „_form.html .erb "in Kommentaren" Ordner anzeigen.

"_comment.html.erb"

<h2><%= @comment.user.name %></h2> 
<p><%= comment.body %></p> 

"_form.html.erb"

<%= form_for([@post, @post.comments.build]) do |f| %> 
    <p> 
    <%= f.text_field :body %> 
    </p> 
    <p> 
    <%= f.submit %> 
    </p> 
<% end %> 

9) Hinzugefügt Kommentare Beiträge anzeigen Seite

<h4><%= @post.comments.count %> comments</h4> 
<%= render @post.comments %> 

<h2>Add a comment</h2> 
<%= render "comments/form"%> 

10) Neustart des Servers

11) Versucht zu einen Kommentar schreiben und bekam folgende Fehlermeldung:

NoMethodError in Posts#show

undefined method `user' for nil:NilClass

<h2><%= @comment.user.name %></h2> #THIS LINE IS THE ERROR 

Antwort

0

Ersten Gotcha, erstellen Sie Ihre Kommentare und somit nur Benutzer zuweisen und das wird nie gespeichert. Ändern Sie Ihren Code wie folgt:

Auf diese Weise wird der Benutzer festgelegt, bevor der Kommentar gespeichert wird. Sie können dem Kommentarmodell auch eine Validierung hinzufügen, um sicherzustellen, dass ein Benutzer vorhanden ist. Auf diese Weise erhalten Sie nil im Feld user_id nicht.

Es würde auch helfen, wenn wir Ihre Show-Aktion sehen ... @comment scheint nicht initialisiert worden zu sein.

0

Der Fehler undefined method 'user' for nil:NilClass bedeutet, dass Ihr @comment (@comment = nil) nicht initialisiert ist, und natürlich nil hat keine user Methode. Vielleicht haben Sie in Ihrer show Aktion Ihrer CommentsController keine @comment definiert. Aktualisieren Sie Ihre show Aktion, um etwas @comment innen zu haben.