Я закончил главу 8 в учебнике Майкла Хартла по Rails Tutorial, поэтому я приложение настроено для регистрации пользователей, входа и выхода.
То, что я пытаюсь сделать, использует метод User Helper внутри application.html.erb (или, точнее, внутри частичного _header.html.erb).
Я хочу использовать метод gravatar_for (определенный в user_helper.rb), чтобы отображать изображение граватара пользователя и имя пользователя вместо слова «Учетная запись» с раскрывающимся списком.
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, что, как я предполагаю, связано с тем, что это show action на контроллере пользователей. Но когда я пытаюсь перейти на домашнюю страницу или на любую другую страницу за пределами Просмотр пользователей, я получаю сообщение об ошибке
NoMethodError in Pages#about
undefined method `email' for nil:NilClass
Итак, я думаю, мой вопрос заключается в том, как сделать метод gravatar for и @user.name доступными для всех представлений во всем приложении. Я чувствую, что ответ должен быть довольно простым, но я новичок в рельсах, поэтому любая помощь будет очень признательна!