1

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__35606540​​18285941260__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
4

1 に答える 1

1

これは bcrypt の問題です。Gemfile で bcrypt のコメントを外したことを確認し、 を実行bundle installしてから、サーバーを再起動します。

参照: 未定義のメソッド `key?' bcrypt-ruby と has_secure_password を使用した nil:NilClass の場合

于 2012-10-09T02:56:36.237 に答える