Undefined метод 'downcase' для nil: NilClass railstutorial

Я пробую рельсы rails4.0

теперь 9.2.0 и не ошибка Rspec.

но rails s имеет NoMethodError в индексе пользователей #, когда open/users

Зачем?

app/models/user.rb

class User < ActiveRecord::Base
 before_save { self.email = email.downcase }
 before_create :create_remember_token
 validates :name, presence: true, length: { maximum: 50 }
 VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-]+(\.[a-z]+)*\.[a-z]+\z/i
 validates :email, presence: true, format: { with: VALID_EMAIL_REGEX },
 uniqueness: { case_sensitive: false }
 has_secure_password
 validates :password, length: { minimum: 6 }

 def User.new_remember_token
 SecureRandom.urlsafe_base64
 end

 def User.encrypt(token)
 Digest::SHA1.hexdigest(token.to_s)
 end

 private

 def create_remember_token
 self.remember_token = User.encrypt(User.new_remember_token)
 end
end

приложение/контроллеры/users_controller.rb

class UsersController < ApplicationController
 before_action :signed_in_user, only: [:index, :edit, :update]
 before_action :correct_user, only: [:edit, :update]

 def index
 @users = User.all
 end

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

 def new
 @user = User.new
 end

 def create
 @user = User.new(user_params)
 if @user.save
 sign_in @user
 flash[:success] = "Welcome to the Sample App!"
 redirect_to @user
 else
 render 'new'
 end
 end

 def edit
 end

 def update
 if @user.update_attributes(user_params)
 flash[:success] = "Profile updated"
 redirect_to @user
 else
 render 'edit'
 end
 end

 private

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

 #Before actions

 def signed_in_user
 unless signed_in?
 store_location
 redirect_to signin_url, notice: "Please sign in."
 end
 end

 def correct_user
 @user = User.find(params[:id])
 redirect_to(root_path) unless current_user?(@user)
 end
end

app/views/users/index.html.slim

- provide(:title, 'All users')
h1 All users
ul.users
 - @users.each do |user|
 li
 = gravatar_for user, size: 52
 = link_to user.name, user

app/helpers/users_helper.rb

module UsersHelper

 # Returns the Gravatar (http://gravatar.com/) for the given user.
 def gravatar_for(user, options = { size: 50 })
 gravatar_id = Digest::MD5::hexdigest(user.email.downcase)
 size = options[:size]
 gravatar_url = "https://secure.gravatar.com/avatar/#{gravatar_id}?s=#{size}"
 image_tag(gravatar_url, alt: user.name, class: "gravatar")
 end
end
2 ответа

Я не пробовал. но это может быть что-то вроде этого.

before_save { self.email = email.downcase if email}


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

licensed under cc by-sa 3.0 with attribution.