Все работало нормально, пока я не попытался определить gravatar_for и вызвать его. user.email.downcase
— нулевой класс. Ниже то, с чем я работаю. Дайте мне знать, если вам нужна какая-либо другая информация.
Я вижу при запуске localhost по адресу http://localhost:3000/users/1
NoMethodError in Users#show
`Showing /Users/nathandewaele/Desktop/workspce/static_pages/app/views/users/show.html.erb where line #6 raised:
undefined method `downcase' for nil:NilClass`
извлеченный исходный код вокруг строки 5 gravatar_id = Digest::MD5::hexdigest(user.email.downcase)
`Rails.root: /Users/nathandewaele/Desktop/workspce/static_pages
Application Trace | Framework Trace | Full Trace
app/helpers/users_helper.rb:5:in `gravatar_for'
app/views/users/show.html.erb:6:in `_app_views_users_show_html_erb___4114710587947303689_70365956197180'
Request
Parameters:
{"id"=>"1"}
Toggle session dump
Toggle env dump
Response
Headers:
None`
приложение/помощники/users_helper.rb
```rb
module UsersHelper
# Returns the Gravatar for the given user.
def gravatar_for(user, options = { size: 80 })
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
```
приложение/контроллеры/users_controller.rb
```ruby
class UsersController < ApplicationController
def show
@user = User.find(params[:id])
end
def new
@user = User.new
end
end
```
приложение/дб/schema.rb
```ruby
ActiveRecord::Schema.define(version: 20171108202327) do
create_table "users", force: :cascade do |t|
t.string "name"
t.string "email"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "password_digest"
t.index ["email"], name: "index_users_on_email", unique: true
end
end
```
приложение/контроллеры/config/routes.rb
```ruby
Rails.application.routes.draw do
# get '/new', to: 'users#new'
get '/show', to: 'users#show'
get '/help', to: 'static_pages#help'
get '/about', to: 'static_pages#about'
get '/contact', to: 'static_pages#contact'
get '/signup', to: 'users#new'
resources :users
end
```
приложение/представления/пользователи/show.html.erb
```erb
<% provide(:title, @user.name) %>
<div class="row">
<aside class="col-md-4">
<section class="user_info">
<h1>
<%= gravatar_for @user %>
<%= @user.name %>
</h1>
</section>
</aside>
</div>
```
gravatar_for
, похоже, что электронная почта отсутствует, поэтому нижний регистр выдает ошибку. - person Pulkit Agarwal   schedule 18.11.2017user.email.downcase
вызывает ошибкуundefined method
downcase for nil`, чемuser.email
, очевидно, возвращаетnil
. У вашего пользователя в базе данных нет электронной почты. Исправьте это, и ошибка исчезнет. - person spickermann   schedule 18.11.2017=> #<ActiveRecord::Relation [#<User id: 1, name: "Naters", email: nil, created_at: "2017-11-17 22:58:34", updated_at: "2017-11-17 22:58:34", password_digest: "$2a$10$oRTXEUFarNBBV7ziJWG7/uIb20wiYR8ghB8dHRrtVAg...">, #<User id: 2, name: "Naters", email: nil, created_at: "2017-11-18 16:27:45", updated_at: "2017-11-18 16:27:45", password_digest: "$2a$10$BwF.FJmluyHiTeME96zpnekI6pWngXdYnUq8iihpspc...">]>
- person Naters   schedule 18.11.2017