2012-10-09 105 views
1

我在遵循Michael Hartl的Rails教程時遇到了意外錯誤。這是一帆風順的。UsersController中的NoMethodError#show/undefined method`key?' for nil:NilClass

我第一次看到我在完成Hartl's Listing 7.3後得到了一個與教程不同的「Action Controller:Exception caught」錯誤。

具體來說,試圖接近時/用戶/ 1,我得到:在UsersController#

NoMethodError顯示

未定義的方法`鍵「?對於零:NilClass

我通過上市7.5繼續 - 增加對視了用戶的表演動作,然後加入表演動作給用戶控制器 - 這解決了錯誤哈特爾漸漸的,但這些步驟沒」解決我的錯誤。

基於this question,我已經驗證了我的應用程序/模型/ user.rb是免費的錯別字:精練它拼寫錯誤之後,我複製粘貼&哈特爾的代碼到我的文件的好辦法。

任何有關尋找錯別字/問題的指南都將非常感謝。

EDIT 1:按照要求,UsersController#顯示方法:

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

編輯2:全跡:

ActionPack的(3.2.8)LIB/action_controller /金屬/hide_actions.rb:36:in`visible_action?'

ActionPack的(3.2.8)LIB/action_controller /金屬/ hide_actions.rb:18:在`method_for_action」

ActionPack的(3.2.8)LIB/action_controller /金屬/ implicit_render.rb:14:在` method_for_action '

ActionPack的(3.2.8)LIB/action_controller /金屬/ compatibility.rb:61:在`method_for_action'

ActionPack的(3.2.8)LIB/abstract_controller/base.rb:115:在`過程'

actionpack(3.2.8)lib/abstract_controller/renderin g.rb:45:在`過程

ActionPack的(3.2.8)LIB/action_controller/metal.rb:203:在`調度」

ActionPack的(3.2.8)LIB/action_controller /金屬/ rack_delegation.rb:14:在`調度 '

ActionPack的(3.2.8)LIB/action_controller/metal.rb:246:在`在動作框'

ActionPack的(3.2.8)LIB/action_dispatch /路由/ route_set.rb:73:在'call'中

actionpack(3.2.8)lib/action_dispatch/routing/route_set。RB:73:在`調度 '

ActionPack的(3.2.8)LIB/action_dispatch /路由/ route_set.rb:36:在`呼叫'

旅程(1.0.4)LIB /旅程/路由器。 RB:68:在呼叫`塊 '

旅程(1.0.4)LIB /旅程/ router.rb:56:在每個`'

旅程(1.0.4)LIB /旅程/路由器。 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 /中間件/ best_standards_support.rb:17:在`呼叫 '

機架(1.4.1)LIB /齒條/ etag.rb:23:在`呼叫'

機架(1.4.1)LIB /齒條/ conditionalget.rb:25:在`呼叫 '

ActionPack的(3.2.8)LIB/action_dispatch /中間件/ head.rb:14:在`呼叫'

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:在'call'中

rack(1.4.1)lib/rack/session/abstract/id.rb:205:在`context '

機架(1.4.1)LIB /齒條/會話/抽象/ id.rb:200:在`呼叫'

ActionPack的(3.2.8)LIB/action_dispatch /中間件/ cookies.rb:339 :在`呼叫 '

了activerecord(3.2.8)LIB/active_record/query_cache.rb:64:在`呼叫'

了activerecord(3.2.8)LIB/active_record/connecti on_adapters /抽象/ connection_pool.rb:473:在`呼叫 '

ActionPack的(3.2.8)LIB/action_dispatch /中間件/ callbacks.rb:28:在呼叫`塊'

的ActiveSupport(3.2。 8)LIB/active_support/callbacks.rb:405:在`_run__35606540​​18285941260__call__3098371293035639072__callbacks'

的ActiveSupport(3.2.8)LIB/active_support/callbacks.rb:405:在`__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:在`run_callbacks'

ActionPack的(3.2.8)LIB/action_dispatch /中間件/ callbacks.rb:27:在`呼叫」

ActionPack的(3.2.8)LIB/action_dispatch /中間件/ reloader.rb:65:在`呼叫 '

ActionPack的(3.2.8)LIB/action_dispatch /中間件/ remote_ip.rb:31:在`呼叫'

actionpack(3.2.8)lib/action_dispatch/middleware/debug_exceptions。RB:16:在`呼叫 '

ActionPack的(3.2.8)LIB/action_dispatch /中間件/ show_exceptions.rb:56:在`呼叫'

railties(3.2.8)LIB /導軌/機架/ logger.rb:26:在`call_app '

railties(3.2.8)LIB /導軌/齒條/ logger.rb:16:在`呼叫'

ActionPack的(3.2.8)LIB/action_dispatch /中間件/ request_id.rb:22:在'call'中

rack(1.4.1)lib/rack/methodoverride.rb:21:在`call'中

機架(1.4.1)LIB /齒條/ runtime.rb:17:在`呼叫」

的ActiveSupport(3.2.8)LIB/active_support /高速緩存/策略/ local_cache.rb:72:在`呼叫'

機架(1.4.1)LIB /齒條/ lock.rb:15:在`呼叫'

ActionPack的(3.2.8)LIB/action_dispatch /中間件/ static.rb:62:在`呼叫'

railties(3.2.8)LIB /導軌/ engine.rb:479:在`呼叫'

railties(3.2.8)利B /軌道/ application.rb中:223:在`呼叫 '

機架(1.4.1)LIB /齒條/ content_length.rb:14:在`呼叫'

railties(3.2.8)LIB /軌道/齒條/ log_tailer.rb:17:在`呼叫 '

機架(1.4.1)LIB /齒條/處理/ webrick.rb:59:在`服務'

/用戶/ aaronmacy /。 rvm/rubies/ruby​​-1.9.3-p194/lib/ruby​​/1.9.1/webrick/httpserver.rb:138:在'service'中

/Users/aaronmacy/.rvm/rubies/ruby-1.9。 3-P194/LIB /紅寶石/ 1.9.1 /的WEBrick/httpserver.rb:94:在`運行 '在start_thread

/Users/aaronmacy/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/webrick/server.rb:191:in`塊'

EDIT 3: users_controller.rb:

class UsersController < ApplicationController 

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

    def new 
    end 
end 

user.rb:

routes.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 
+0

@muistooshort把它添加到OP – amacy

+1

是回溯的其餘部分可用?你確定這個錯誤與find語句的行號有關嗎?如果在控制檯中執行User.find(1)會發生什麼? – jordanpg

+0

@jordanpg不,不確定。如果我在控制檯中輸入User.find(1),它會找到用戶:id => 1.我要將完整跟蹤添加到問題中... – amacy

回答

相關問題