我已经设置了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的新手!
答案 0 :(得分:2)
试试这个:
<%= image_tag avatar_url(current_user), :class => 'gravatar' %>
答案 1 :(得分: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将起作用。当您继续使用它时,您将看到的典型轨道模式是,以@符号开头的大多数变量将在该视图的相应控制器方法中定义。因此,如果您使用带@的变量,并且它不可用,请检查控制器以确保首先定义它。 (仅供参考,如果您想了解更多,这些被称为实例变量)。
要解决第二个问题,如果您是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这样的网址,您可以使用与avatar_url完全相同的调用,传递@user,它将获得该用户的头像,其中用户是与给定用户ID匹配的用户ID 。您可能已经在控制器中已经有了这个确切的代码,但希望现在您能看到它的工作原理。
祝你好运!