2014-03-26 3 views
1

정의되지 않은 메서드 avatar?' for nil:NilClass undefined method 이름 'NilClass정의되지 않은 방법, 아바타 이름 : 무기 호에 대한 NilClass

안녕, 내 부분에 다음과 같은 오류가 발생하고 있습니다. 둘 다 나열된 이유는 첫 번째 오류 메시지가 원인 인 행을 주석 처리 한 후에 문제가 "아바타"또는 "이름"이 아닌 다른 것으로 생각하게하는 두 번째 오류가 발생하기 때문입니다. 무엇을 모르겠다. 레일 콘솔에서 사용자의 이름과 전화를 할 수 있습니다. 또한 문제가된다면 Faker를 사용하여 데이터베이스를 파종했습니다. 여기에 부분이 있습니다.

<%= content_tag :div, class: 'media', id: "comment-#{comment.id}" do %> 
    <%= link_to '#', class: 'pull-left' do %> 
    <%= image_tag(comment.user.avatar.small.url) if comment.user.avatar? %> 
    <% end %> 
    <div class="media-body"> 
    <small> 
     <%= comment.user.name %> commented <%= time_ago_in_words(comment.created_at) %> ago 
     <% if policy(comment).destroy? %> 
     | <%= link_to "Delete", [@topic, @post, comment], method: :delete %> 
     <% end %> 
    </small> 
    <p><%= comment.body %></p> 
    </div> 
<% end %> 

또한 렌더링을 참조하십시오.

<div class="col-md-4"> 
    <% if policy(Comment.new).create? %> 
     <h4>Leave a comment</h4> 
     <br/> 
     <%= render partial: 'comments/comment', locals: { topic: @topic, post: @post, comment: @comment } %> 
    <% end %> 
</div> 

은 아래 내 사용자 모델과 comments_controller

class UsersController < ApplicationController 
    before_filter :authenticate_user! 

    def update 
    if current_user.update_attributes(user_params) 
     flash[:notice] = "User information updated" 
     redirect_to edit_user_registration_path(current_user) 
    else 
     render "devise/registrations/edit" 
    end 
    end 

    private 

    def user_params 
    params.require(:user).permit(:name, :avatar) 
    end 
end 

Comments_controller

def create 
    @topic = Topic.find(params[:topic_id]) 
    @post = @topic.posts.find(params[:post_id]) 
    @comments = @post.comments 

    @comment = current_user.comments.build(comment_params) 
    @comment.post = @post 
    @new_comment = Comment.new 

    authorize @comment 
    if @comment.save 
     redirect_to [@topic, @post], notice: "Comment was submitted successfully." 
    else 
     flash[:error] = "There was an error submitting the comment. Please try again." 
    end 
    end 

이미 데이터베이스를 다시 설정했지만, 아무 소용에 있습니다. 문제가 무엇인지 파악하십시오. 당신의 도움을 주셔서 감사합니다.

내 사용자 및 댓글 모델은 아래를 참조하십시오.

class Comment < ActiveRecord::Base 
    belongs_to :post 
    belongs_to :user 

    default_scope { order('created_at DESC') } 

    validates :body, length: { minimum: 5 }, presence: true 

    after_create :send_favorite_emails 

    private 

    def send_favorite_emails 
    self.post.favorites.each do |favorite| 
     if favorite.user_id != self.user_id && favorite.user.email_favorites? 
     FavoriteMailer.new_comment(favorite.user, self.post, self).deliver 
     end 
    end 
    end 
end 

사용자 모델

class User < ActiveRecord::Base 
    # Include default devise modules. Others available are: 
    # :confirmable, :lockable, :timeoutable and :omniauthable 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable, :confirmable 

    has_many :posts 
    has_many :comments 
    has_many :votes, dependent: :destroy 
    has_many :favorites, dependent: :destroy 
    mount_uploader :avatar, AvatarUploader 

    def role?(base_role) 
    role == base_role.to_s 
    end 

    def favorited(post) 
    self.favorites.where(post_id: post.id).first 
    end 

    def voted(post) 
    self.votes.where(post_id: post.id).first 
    end 

    private 
end 
+1

'전무해야한다 렌더링 inside –

+0

'User'와'Comment' 모델을 보여줄 수 있습니까? –

+0

댓글에 댓글이 설정되어 있지 않습니다. 왜? 그게 어딘가에있다. current_user.comments.build (comment_params) 주변은 내가보고있는 곳입니다. –

답변

1

당신은 당신이 당신의 메소드를 호출하고있는 일이 있다는 nil:NilClass

에 대한 정의되지 않은 메서드 foo

을 받고있는 경우 nil.

귀하의 경우 귀하는 및 name으로 전화하고 있습니다.

코드를 보면 comment.user은 (a) 해당 메소드가 호출되는 대상이며 따라서 (b) 무효라는 점은 분명합니다.

결과 : 댓글에 사용자가 없습니다. 사용자 (공백 사용자)를 갖기 위해 모든 주석 (새/빈/스텁 포함)을 적용하거나 사용자가 필요하지 않도록보기를 만드십시오.

+0

주석과 사용자 모델을 추가했습니다. 나는 그 방법이 무엇을 요구 받았는지에 대한 의구심이 있었다고 생각하지만 위와 같이 쓴 것처럼, 레일즈 콘솔에는 모든 주석에 user_id가있다. 또한, 나는 초보자, 그래서 내가 뭘 더 찾아야할지 모르겠다 – user3465296

+0

@ user3465296 내가 당신의 상황에서 뭘 할거야 [pry] (http://pryrepl.org/) (gem' pry-rails') 그리고 예외 앞에'<% binding.pry %> '를 삽입하십시오. –

0

문제가 발견되었습니다. 당신은 어느 쪽 undelcared 변수를 호출하고 있기 때문에 NilClass` 오류가 일반적입니다 * 또는 * 사용중인 var에있다`nil` 데이터 : 부분에서

comment: @comment 

comment: comment