Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 用户中的命名错误#显示_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails 3 用户中的命名错误#显示

Ruby on rails 3 用户中的命名错误#显示,ruby-on-rails-3,Ruby On Rails 3,每次我尝试访问用户配置文件页面时,都会出现此错误 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:

每次我尝试访问用户配置文件页面时,都会出现此错误

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'
以下是我的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>

错误在您的助手方法中。请验证@user对象不是nil。 然后在您的视图中,按如下方式更改行号5:

<%= gravatar_for(@user) %>

显然,您的
@user
nil
。Dave,有一个用户。我尝试创建一个新用户,但仍然出现相同的错误。有什么办法可以解决这个问题吗?你确定用户正在被传递到视图吗?Paul,我如何检查它?尝试从中打印/渲染一些内容。或者在出现错误之前查看您的控制器或模板。我进行了您建议的编辑@sannankhalid,现在看来我在这行代码的最后一个括号中出现了语法错误,def gravatar_for(@user)。知道我为什么会这样做吗?删除“@”符号,使这行代码变成def gravatar_for(user)并在方法中使用“user”而不是“@user”
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
<%= gravatar_for(@user) %>
def gravatar_for(@user)
  ..........
  @user.email
  ..........
  rerurn somthing #if you want
end