2014-12-05 3 views
0

Я создаю приложение Rails, которое отображает гравитатор пользователя в заголовке сайта. Вспомогательный метод заключается в следующем:Получение неопределенной ошибки метода после перехода на домашнюю страницу

приложение/хелперы/users_helper.rb

# Returns the Gravatar for the given user. 
def gravatar_for(user) 
    gravatar_id = Digest::MD5::hexdigest(user.email.downcase) 
    gravatar_url = "https://secure.gravatar.com/avatar/#{gravatar_id}" 
    image_tag(gravatar_url, alt: user.name, class: "gravatar") 
end 

Проблема у меня в том, что, когда зарегистрированный пользователь нажимает на ссылку логотип, чтобы перейти на домашнюю страницу , Я получаю эту ошибку:

undefined method `email' for nil:NilClass 

Я использую переменную экземпляра для отображения гравитатора пользователя в заголовке. Это код, который находится в меню навигации:

приложение/просмотров/макеты/_header.html.erb

<header class="site-header"> 
<div class="site-header-content"> 
    <div class="site-header-content__nav"> 
     <figure class="site-header-content__nav--logo"> 
      <%= link_to image_tag("global/logo.png", alt: "Lemur") %> 
      <figcaption><%= link_to "Lemur", root_path %></figcaption> 
     </figure> 
     <input type="checkbox" id="toggle" /> 
     <nav class="site-header-content__nav--menu"> 
      <label for="toggle" class="toggle" data-open="&#xf0c9;" data-close="&#xf00d;" onclick></label> 
      <ul> 
       <% if logged_in? %> 
        <li><%= link_to "Users", users_path %></li> 
        <li><%= link_to "Sign Out", logout_path, method: "delete" %></li> 
       <% else %> 
        <li><%= link_to "About", about_path %></li> 
        <li><%= link_to "Terms", terms_path %></li> 
        <li><%= link_to "Help", help_path %></li> 
        <li><%= link_to "Sign In", login_path %></li> 
       <% end %> 
      </ul> 
     </nav> 
    </div> 
    <% if current_page?(root_path) && !logged_in? %> 
     <div class="site-header-content__callout"> 
      <h1>Get the word out!</h1> 
      <p>Write about what's happening around you, post about upcoming events and more with Lemur.</p> 
      <div class="site-header-content__callout--buttons"> 
       <%= link_to "Sign Up", signup_path, class: "btn btn__lg btn__primary" %> 
       <%= link_to "Sign In", login_path, class: "btn btn__lg btn__primary" %> 
      </div> 
     </div> 
     <div class="site-header-content__down-arrow"> 
      <a href="#home-feature__local"><%= embedded_svg "down.svg" %></a> 
     </div> 
    <% end %> 
</div> 

Что я здесь делаю неправильно? Я хочу, чтобы gravatar появлялся на сайте, когда пользователь все еще вошел в систему. Спасибо заранее.

+0

Вы пытались напечатать пользователь? это ноль ..? Используете ли вы «изобретать»? – Jyothu

+0

@Jyothu Я использую систему аутентификации Майкла Хартла. Пользователь не ноль. – jtarr523

+0

whats ur root_path? там вы должны взять @user. – Jyothu

ответ

0

Вы упомянули, как «когда вошедшего в пользователь нажимает на ссылку логотип, чтобы перейти на домашнюю страницу, я получаю эту ошибку:»

Так проверить root_path. в конфигурации/routes.rb (я предполагаю, что, нажав на логотип, Вы принимаете пользователя на главную страницу.)

Например: root 'home#index'

Тогда в HomeController

def index 
    @user = get the user 
end 
+0

Hi @Jyothu. Я обновил свой вопрос, чтобы вы могли полностью понять, в чем проблема. Я забыл упомянуть, что пользователь щелкнул бы, если бы он отправил их на главную страницу. См. Мой обновленный вопрос. Строка кода '

<% = link_to" Lemur ", root_path%>
' принимает пользователя на домашнюю страницу. Будет ли это решение работать? – jtarr523

+0

Да. оно работает. Я просто привел пример, используя home_index_path, вместо этого вы можете взять @user в свой root_path – Jyothu

Смежные вопросы