我完成了 Michael Hartl 的 Rails 教程的第 8 章,所以我设置了应用程序来注册用户并登录和注销。
我正在尝试在 application.html.erb 中使用 User Helper 方法(或更具体地说,在 _header.html.erb 部分中)。
我想使用 gravatar_for 方法(在 user_helper.rb 中定义)来显示用户的 gravatar 图片和用户名,而不是在下拉菜单中使用“Account”一词。
module UsersHelper
# Returns the Gravatar for the given user.
def gravatar_for(user, options = { size: 150})
gravatar_id = Digest::MD5::hexdigest(user.email.downcase)
size = options[:size]
gravatar_url = "http://gravatar.com/avatar/#{gravatar_id}?s=#{size}"
image_tag(gravatar_url, alt: user.name, class: "gravatar")
end
end
在 show.html.erb 页面上,我有以下代码
<% provide(:title, @user.name ) %>
<div class="row">
<aside class="span6">
<section>
<h1>
<%= gravatar_for @user %>
<%= @user.name %>
</h1>
</section>
</aside>
</div>
这会在他们的个人资料页面上显示用户的头像和姓名。所以我试图做的是像这样将这些相同的方法添加到部分标题中;
<% if signed_in? %>
<li id="fat-menu" class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
<span id="small">
<%= gravatar_for @user %><%= @user.name %><b class="caret"></b>
</span>
</a>
<ul class="dropdown-menu">
<li><%= link_to "Profile", current_user %></li>
<li><%= link_to "Settings", '#' %></li>
<li class="divider"></li>
<li><%= link_to "Sign out", signout_path, method: "delete" %></li>
</ul>
</li>
<% else %>
<li id="cta"><%= link_to "+ Sign up", signup_path %></li>
<li><%= link_to "Sign in", signin_path %></li>
<% end %>
并且该代码在show.html.erb页面上显示得很好,我假设这是因为它在Users 控制器上的显示操作。但是,当我尝试单击主页或用户视图之外的任何其他页面时,我会收到错误消息
NoMethodError in Pages#about
undefined method `email' for nil:NilClass
所以我想我的问题是如何使方法的gravatar和@user.name可用于整个应用程序的所有视图。我觉得答案应该相当简单,但我对 Rails 很陌生,所以任何帮助将不胜感激!