0

我已经设置了 gravatar 并让它为我工作'users/*user id goes here*'. 但是每当我尝试使用它dashboard/index时,它就会给我错误

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

抱歉,我对 Ruby-On-Rails 还很陌生!

4

2 回答 2

2

试试这个:

<%= image_tag avatar_url(current_user), :class => 'gravatar' %>
于 2013-03-18T19:03:30.177 回答
1

您真的希望在控制器中使用它:

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

注意添加的第二行,它将@user 变量分配给current_user。

然后,您在视图中调用的@user 将起作用。当您继续使用它时,您会看到一个典型的 Rails 模式,大多数以 @ 符号开头的变量将在该视图的相应控制器方法中定义。因此,如果您使用带有 @ 的变量,但它不可用,请检查控制器以确保首先定义它。(仅供参考,如果您想了解更多信息,这些被称为实例变量)。

为了解决第二个问题,如果您是 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

这将适用于 /users/1 之类的 URL,您可以对 avatar_url 使用相同的调用,传递@user,它将获取该用户的头像,其中用户是与给定用户 ID 匹配的用户。你可能已经在你的控制器中拥有了这个确切的代码,但希望现在你明白它为什么起作用了。

祝你好运!

于 2013-06-24T21:42:35.857 回答