2013-03-18 3 views
0

나는이 Gravatar를 설정 한 및 위해 일을 가지고 내 'users/*user id goes here*'. 그러나 나는 그것이 나에게 오류를 제공 할 때마다의 dashboard/index에서 사용하려고 할 때마다Gravatar에 - 전무에 대한 정의되지 않은 방법 '이메일'NilClass

Undefined method 'email' for nil:NilClass 

내 대시 보드 컨트롤러는 다음과 같습니다

class DashboardController < ApplicationController 

    def index 

    respond_to do |format| 
     format.html # index.html.erb 
     format.json { render json: @posts } 
    end 
    end 

end 

대시 보드보기 :

<div class="dash-well"> 
    <div class="gravatar-dashboard"> 
     <%= image_tag avatar_url(@user), :class => 'gravatar' %> 
     <h1 class="nuvo wtxt"><%= current_user.username.capitalize %></h1> 
    </div> 
</div> 

내 응용 프로그램 도우미 :

module ApplicationHelper 
    def avatar_url(user) 
     default_url = "#{root_url}images/guest.png" 
     gravatar_id = Digest::MD5.hexdigest(user.email.downcase) 
     "http://gravatar.com/avatar/#{gravatar_id}.png?s=200{CGI.escape(default_url)}" 
    end 

    def avatar_url_small(user) 
     default_url = "#{root_url}images/guest.png" 
     gravatar_id = Digest::MD5.hexdigest(user.email.downcase) 
     "http://gravatar.com/avatar/#{gravatar_id}.png?s=40{CGI.escape(default_url)}" 
    end 
end 

내 사용자 모델 :

class User < ActiveRecord::Base 

    # Include default devise modules. Others available are: 
    # :token_authenticatable, :confirmable, 
    # :lockable, :timeoutable and :omniauthable 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 

    # Setup accessible (or protected) attributes for your model 
    attr_accessible :email, :password, :password_confirmation, :remember_me, :username, :user_id, :id, :website, :bio, :skype, :dob, :age 

    has_many :posts 
    # attr_accessible :title, :body 
end 

내 대시 보드 모델 :

class Dashboard < ActiveRecord::Base 
    attr_accessible :status, :author, :email, :username, :id, :user_id, :user, :website, :bio, :skype, :dob, :age 

    belongs_to :user 
end 

미안 해요, 난 루비 온 레일에 아주 새로운 해요!

답변

2

이 시도 :

<%= image_tag avatar_url(current_user), :class => 'gravatar' %> 
+0

붐! 덕분에 필요한 CURRENT_user에 대해 그것을 분류합니다! 그러나 사용자가 다른 사용자 대시 보드로 이동하고 자신의 gravatar를 볼 수 있도록해야합니다. – coreypizzle

+0

어떻게 이동합니까 .. 사용자에게 링크를 제공하고 있습니까? – codeit

+0

예 링크를 제공하고 있습니다. – coreypizzle

1

당신은 정말 컨트롤러이 원하는 :

def index 
    @user = current_user 
    respond_to do |format| 
    format.html # index.html.erb 
    format.json { render json: @posts } 
    end 
end 

주에게 CURRENT_USER에 @user 변수를 할당 번째 줄의 추가.

그러면보기에서 호출중인 @user가 작동합니다. 계속해서 사용함에 따라 나타나는 일반적인 레일 패턴은 @ 기호로 시작하는 대부분의 변수가 해당 뷰의 해당 컨트롤러 메소드에 정의된다는 것입니다. 따라서 @를 사용하는 변수를 사용할 수없는 경우 컨트롤러가 먼저 정의되었는지 확인하십시오. (당신이 더 많은 것을 배우고 싶다면 이것들을 인스턴스 변수라고 부른다.) 당신이 CURRENT_USER 경우

는 두 번째 문제를 해결하기 위해 당신은 다른 사용자의 페이지를 방문하고 싶었 :

def show 
    @user = User.find params[:id] 
    respond_to do |format| 
    format.html # index.html.erb 
    format.json { render json: @user } 
    end 
end 

이것은/같은 URL과 함께 일하는 것이 사용자가/1, 당신에게 바로 그 같은 전화를 사용할 수 있습니다 avatar_url, @user를 전달하면 지정된 사용자 ID와 일치하는 사용자의 아바타를 가져옵니다. 이미 컨트롤러에 이미 정확한 코드가 이미있을 것입니다.하지만 이제는 작동하는 이유를 알았을 것입니다.

행운을 빈다.

관련 문제