2016-04-18 3 views
2

Я продолжаю получать NoMethodError в Users#show.NoMethodError in Users # show on rails project

undefined method `downcase' for nil:NilClass 

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


show.html.erb

<h1 align="center"> Welcome to <%= @user.username %>'s page</h1> 
<div class="row"> 
    <div class="col-md-4 col-md-offset-4 center"> 
     <%= gravatar_for @user %> 
    </div> 
</div> 
<h4 align="center"><%= @user.username %>'s articles</h4> 

users_controller.rb

class UsersController < ApplicationController 

    def new 
    @user = User.new 
    end 

    def create 
    @user = User.new(user_params) 
    if @user.save 
     flash[:success] = "Welcome to the alpha blog #{@user.username}" 
     redirect_to articles_path 
    else 
     render 'new' 
    end 
    end 

    def edit 
    @user = User.find(params[:id]) 
    end 

    def update 
    @user = User.find(params[:id]) 
    if @user.update(user_params) 
     flash[:success] = "Your account was updated successfully" 
     redirect_to articles_path 
    else 
     render 'edit' 
    end 
    end 

    def show 
    @user = User.find(params[:id]) 
    end 

    private 

    def user_params 
     params.require(:user).permit(:username, :email, :password) 
    end 
end 

application_helper.rb

module ApplicationHelper 
    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.username, class: "img-circle") 
    end 
end 
+0

вы после любых руководств или книги? –

+0

@DharmeshRupani онлайн-лекционные видеоролики –

+0

Проверьте, присутствует ли ваш адрес электронной почты пользователя или нет. Ошибка, похожее на значение: электронная почта - nill. –

ответ

2

Ошибка на первой строке метода gravatar_for. user.email - это нуль, поэтому вы получаете эту ошибку, когда пытается вызвать downcase на ноль. Это происходит потому, что у пользователя нет электронной почты.

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

+0

спасибо @GabrielErbetta –

2

Я бы предположил, что вы получаете ошибку на этой линии:

gravatar_id = Digest::MD5::hexdigest(user.email.downcase) 

, который будет означать, что user.email возвращается ноль

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