我在遵循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__3560654018285941260__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
@muistooshort把它添加到OP – amacy
是回溯的其餘部分可用?你確定這個錯誤與find語句的行號有關嗎?如果在控制檯中執行User.find(1)會發生什麼? – jordanpg
@jordanpg不,不確定。如果我在控制檯中輸入User.find(1),它會找到用戶:id => 1.我要將完整跟蹤添加到問題中... – amacy