MichaelHartlのRailsチュートリアルを実行しているときに、予期しないエラーが発生しました。順調な航海でした。
Hartlのリスト7.3の完了後、チュートリアルとは異なる「アクションコントローラー:例外がキャッチされました」エラーが発生していることを最初に確認しました。
具体的には、/ users / 1に到達しようとすると、次のようになります。
UsersController#showのNoMethodError
未定義のメソッド`key? ' nilの場合:NilClass
リスト7.5に進み、ユーザーのshowアクションのビューを追加してから、showアクションをUsersコントローラーに追加しました。これにより、Hartlが取得していたエラーは解決されましたが、これらの手順ではエラーは解決されませんでした。
この質問に基づいて、app / models / user.rbにタイプミスがないことを確認しました。タイプミスがないか調べた後、Hartlのコードをコピーしてファイルに貼り付けました。
タイプミス/問題を探す他の場所に関するガイダンスをいただければ幸いです。
編集1:要求に応じて、UsersController#showメソッド:
def show
@user = User.find(params[:id])
end
編集2:完全なトレース:
actionpack(3.2.8)lib / action_controller / metal / hidden_actions.rb:36:in `visible_action? '
actionpack(3.2.8)lib / action_controller / metal / hidden_actions.rb:18:in `method_for_action '
actionpack(3.2.8)lib / action_controller / metal / implicit_render.rb:14:in `method_for_action '
actionpack(3.2.8)lib / action_controller / metal / compatibility.rb:61:in `method_for_action '
actionpack(3.2.8)lib / abstract_controller / base.rb:115:in `process '
actionpack(3.2.8)lib / abstract_controller / rendering.rb:45:in `process '
actionpack(3.2.8)lib / action_controller / metal.rb:203:in `dispatch '
actionpack(3.2.8)lib / action_controller / metal / Rack_delegation.rb:14:in `dispatch '
actionpack(3.2.8)lib / action_controller / metal.rb:246:in `block in action '
actionpack(3.2.8)lib / action_dispatch / routing / route_set.rb:73:in `call '
actionpack(3.2.8)lib / action_dispatch / routing / route_set.rb:73:in `dispatch '
actionpack(3.2.8)lib / action_dispatch / routing / route_set.rb:36:in `call '
ジャーニー(1.0.4)lib / journal / router.rb:68:in `block in call '
旅(1.0.4)lib / journal / router.rb:56:in `each '
旅(1.0.4)lib / journal / router.rb:56:in `call '
actionpack(3.2.8)lib / action_dispatch / routing / route_set.rb:600:in `call '
actionpack(3.2.8)lib / action_dispatch / Middleware / best_standards_support.rb:17:in `call '
ラック(1.4.1)lib / Rack / etag.rb:23:in `call '
ラック(1.4.1)lib / Rack / conditionalget.rb:25:in `call '
actionpack(3.2.8)lib / action_dispatch / Middleware / head.rb:14:in `call '
actionpack(3.2.8)lib / action_dispatch / Middleware / params_parser.rb:21:in `call '
actionpack(3.2.8)lib / action_dispatch / Middleware / flash.rb:242:in `call '
ラック(1.4.1)lib / Rack / session / abstract / id.rb:205:in `context '
ラック(1.4.1)lib / Rack / session / abstract / id.rb:200:in `call '
actionpack(3.2.8)lib / action_dispatch / Middleware / Cookies.rb:339:in `call '
activerecord(3.2.8)lib / active_record / query_cache.rb:64:in `call '
activerecord(3.2.8)lib / active_record / connection_adapters / abstract / connection_pool.rb:473:in `call '
actionpack(3.2.8)lib / action_dispatch / Middleware / callbacks.rb:28:in `block in call '
activesupport(3.2.8)lib / active_support / callbacks.rb:405:in `_run__3560654018285941260__call__3098371293035639072__callbacks '
activesupport(3.2.8)lib / active_support / callbacks.rb:405:in `__run_callback '
activesupport(3.2.8)lib / active_support / callbacks.rb:385:in `_run_call_callbacks '
activesupport(3.2.8)lib / active_support / callbacks.rb:81:in `run_callbacks '
actionpack(3.2.8)lib / action_dispatch / Middleware / callbacks.rb:27:in `call '
actionpack(3.2.8)lib / action_dispatch / Middleware / reloader.rb:65:in `call '
actionpack(3.2.8)lib / action_dispatch / Middleware / remote_ip.rb:31:in `call '
actionpack(3.2.8)lib / action_dispatch / Middleware / debug_exceptions.rb:16:in `call '
actionpack(3.2.8)lib / action_dispatch / Middleware / show_exceptions.rb:56:in `call '
railties(3.2.8)lib / rails / Rack / logger.rb:26:in `call_app '
railties(3.2.8)lib / rails / Rack / logger.rb:16:in `call '
actionpack(3.2.8)lib / action_dispatch / Middleware / request_id.rb:22:in `call '
ラック(1.4.1)lib / Rack / methodoverride.rb:21:in `call '
ラック(1.4.1)lib / Rack / runtime.rb:17:in `call '
activesupport(3.2.8)lib / active_support / cache /strategy / local_cache.rb:72:in `call '
ラック(1.4.1)lib / Rack / lock.rb:15:in `call '
actionpack(3.2.8)lib / action_dispatch / Middleware / static.rb:62:in `call '
railties(3.2.8)lib / rails / engine.rb:479:in `call '
railties(3.2.8)lib / rails / application.rb:223:in `call '
ラック(1.4.1)lib / Rack / content_length.rb:14:in `call '
railties(3.2.8)lib / rails / Rack / log_tailer.rb:17:in `call '
ラック(1.4.1)lib / Rack / handler / webrick.rb:59:in `service '
/Users/aaronmacy/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/webrick/httpserver.rb:138:in `service '
/Users/aaronmacy/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/webrick/httpserver.rb:94:in `run '
/Users/aaronmacy/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/webrick/server.rb:191:in `block in start_thread '
編集3: users_controller.rb:
class UsersController < ApplicationController
def show
@user = User.find(params[:id])
end
def new
end
end
user.rb:
class User < ActiveRecord::Base
attr_accessible :name, :email, :password, :password_confirmation
has_secure_password
before_save { self.email.downcase! }
validates :name, presence: true, length: { maximum: 50 }
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
validates :email, presence: true,
format: { with: VALID_EMAIL_REGEX },
uniqueness: { case_sensitive: false }
validates :password, presence: true, length: { minimum: 6 }
validates :password_confirmation, presence: true
end
ルート.rb:
SampleApp::Application.routes.draw do
resources :users
root to: 'static_pages#home'
match '/signup', to: 'users#new'
match '/help', to: 'static_pages#help'
match '/about', to: 'static_pages#about'
match '/contact', to: 'static_pages#contact'
end