2012-01-13 64 views
0

每次尝试访问用户配置文件页面时,都会出现此错误。用户中的NoMethodError#show

ActionView::Template::Error (undefined method `email' for nil:NilClass): 
2: <tr> 
3:  <td class="main"> 
4:  <h1> 
5:   <%= gravatar_for @user %> 
6:   <%= @user.name %> 
7:  </h1> 
8:  </td> 

app/helpers/users_helper.rb:4:in `gravatar_for' 
app/views/users/show.html.erb:5:in `_app_views_users_show_html_erb__222181804_33777120' 

下面是我的users.controller.rb文件的样子。

def show 
@user = User.find(params[:id]) 
@microposts = @user.microposts.paginate(:page => params[:page]) 
@title = @user.name 

有关其他参考,以下是我的show.html.erb文件的副本。

<table class="profile" summary="Profile information"> 
    <tr> 
    <td class="main"> 
     <h1> 
     <%= gravatar_for @user %> 
     <%= @user.name %> 
     </h1> 
    </td> 
    <td class="sidebar round"> 
     <strong>Name</strong> <%= @user.name %><br /> 
     <strong>URL</strong> <%= link_to user_path(@user), @user %> 
    </td> 
    </tr> 
</table> 

此外还提供了我的users_helper.rb文件。

module UsersHelper 

    def gravatar_for(user, options = { :size => 50 }) 
    gravatar_image_tag(user.email.downcase, :alt => h(user.name), 
              :class => 'gravatar', 
              :gravatar => options) 
    end 
end 
+0

您users_helper#gravatar_for的方法是有一个用户? – 2012-01-13 01:43:00

+0

显然,你的'@ user'是'nil'。 – 2012-01-13 01:45:59

+0

戴夫,有一个用户。我试过创建一个新用户,但我仍然得到相同的错误。任何想法如何解决这个问题? – Michele 2012-01-13 01:55:59

回答

1

错误在您的帮助方法中。请确认@user对象不是零。 您认为这些更改行号5是这样的:

<%= gravatar_for(@user) %> 

这样定义

def gravatar_for(@user) 
    .......... 
    @user.email 
    .......... 
    rerurn somthing #if you want 
end 
+0

我做了你建议@sannankhalid的编辑,现在看起来我在这行代码的最后一个括号里有一个语法错误,def gravatar_for(@user)。关于为什么我要这样做的任何想法? – Michele 2012-01-13 23:57:49

+0

删除'@'符号,以便该行成为def gravatar_for(user)并在方法中使用'user'代替'@user' – 2012-01-14 14:23:23