无法找到’破坏’动作,但它就在那里……奇怪的错误

我的应用程序似乎无法在我的Sessions控制器中找到“destroy”操作。 很奇怪,因为它就在那里。

我有这样的链接:

 

我在routes.rb路由到我的destroy动作:

 match '/logout' => "sessions#destroy", :as => "logout" 

这是我的会话控制器中的’destroy’动作:

 def destroy reset_session redirect_to videos_path end 

当我点击链接时,我在日志中收到此错误:

 Started GET "/logout" for 127.0.0.1 at Thu Mar 24 02:58:36 -0700 2011 AbstractController::ActionNotFound (The action 'destroy' could not be found for SessionsController): 

这里发生了什么?

更新:

这是我的routes.rb文件:

 root :to => "videos#new" resources :videos resources :video_votes resources :users resource :session match '/login' => "sessions#new", :as => "login" match '/logout' => "sessions#destroy", :as => "logout" 

SessionsController.instance_methods输出:

[“protected_instance_variables”,“asset_path”,“hidden_​​actions?”,“with_warnings”,“inspect”,“content_type”,“new_polymorphic_url”,“authenticate_with_http_basic”,“new_user_path”,“details_for_lookup”,“allow_forgery_protection =”,“view_context” ,“protected_instance_variables =”,“asset_path =”,“default_url_options”,“authenticate_with_http_token”,“ id ”,“content_type =”,“assign_shortcuts”,“_ oroutes”,“_ save_fragment”,“default_url_options =”,“hash_for_new_session_path”,“ redirect_to_facebox“,”edit_video_path“,”_ output_conditions“,”enable_warnings“,”new_polymorphic_path“,”request_http_basic_authentication“,”hash_for_new_user_url“,”methods“,”append_view_path“,”request_http_token_authentication“,”hash_for_logout_path“,”hidden_​​actions“,”_ layout_conditions = “,” 发送 “,”hash_for_edit_video_vote_path“,”handler_for_rescue“,”expire_action“,”new_session_path“,”hidden_​​actions =“,”gem“,”caching_allowed?“,”hash_for_edit_video_url“,”asset_host“,”_ renderers?“,” to_json“,”罪恶 gleton_methods“,”page_cache_extension“,”authenticate“,”new_user_url“,”nil?“,”asset_host =“,”responder“,”logout_path“,”action_methods“,”formats“,”prepend_view_path“,”edit_video_vote_path“,” _handle_method_missing“,”page_cache_extension =“,”_ _ 1 _ _ _ _ _ _ _ _ _“”“ “,”edit_video_url“,”to_yaml_properties“,”form_authenticity_token“,”rescue_handlers =“,”with_options“,”protected_methods“,”silence_stderr“,”perform_caching =“,”等于?“,”可复制?“,”hash_for_logout_url“, “mimes_for_respond_to”,“hash_for_edit_video_vote_url”,“_ __ _ _ _ _ _ _ _ _ _ _ _” “hash_for_edit_user_path”,“send”,“hash_for_root_path”,“html_safe?”, “执行?”,“eql?”,“current_user”,“to_yaml”,“decode_b”,“logout_url”,“id”,“edit_video_vote_url”,“_ render_option_js”,“verified_request?”,“sanitize_dom_id”,“hash_for_video_path” ,“_ render_template”,“handle_unverified_request”,“instance_eval”,“render”,“edit_user_path”,“public_methods”,“cache_page”,“hash_for_root_url”,“respond_to”,“type”,“_ render_option_xml”,“hash_for_edit_session_path”,“ action_has_layout?“,”hash_for_video_url“,”mimes_for_respond_to?“,”translate“,”instance_exec“,”hash_for_edit_user_url“,”suppress“,”instance_variables“,”blank?“,”hash_for_videos_path“,”method_for_action“,”b64encode“, “class”,“_ render_option_update”,“url_options”,“hash_for_video_vote_path”,“singleton_class”,“lookup_context”,“edit_session_path”,“reset_session”,“video_url”,“unloadable”,“instance_variable_get”,“encode64”,“dispatch” “,”“礼物?”,“edit_user_url”,“videos_path”,“==”,“hash_for_rails_info_properties_path”,“在场”,“头部”,“_ view_paths?”,“===”,“clo ne“,”session“,”fresh_when“,”video_vote_path“,”_ normalize_options“,”config“,”find_template“,”view_context_class“,”response_body“,”fragment_cache_key“,”hash_for_edit_session_url“,”form_authenticity_param“,”hash_for_video_votes_path“ ,“view_context_class =”,“logged_in?”,“debugger”,“instance_variable_set”,“response_body =”,“locale”,“authenticate_or_request_with_http_digest”,“hash_for_user_path”,“=〜”,“_ helper_methods”,“access_denied”,“ hash_for_videos_url“,”create“,”rails_info_properties_path“,”dup“,”cache_store“,”polymorphic_path“,”locale =“,”hash_for_video_vote_url“,”_ help_methods =“,”instrument_fragment_cache“,”edit_session_url“,”process“,” cache_store =“,”_ renderers“,”object_id“,”video_votes_path“,”_ process_action_callbacks“,”fragment_exist?“,”as_json“,”user_path“,”respond_to?“,”_ renderers =“,”expires_in“,”陈旧? “,”render_to_facebox“,”read_fragment“,”videos_url“,”acts_like?“,”allow_concurrency“,”hash_for_rails_info_properties_url“,”模板 _exists?“,”send_action“,”returns“,”taint“,”expires_now“,”video_vote_url“,”t“,”assets_dir“,”view_paths“,”_ helpers“,”allow_concurrency =“,”params“,” redirect_to“,”middleware_stack“,”to_enum“,”hash_for_video_votes_url“,”assets_dir =“,”instance_variable_defined?“,”require_or_load“,”_ prefix“,”_ helpers =“,”params =“,”authenticate_with_http_digest“,”hash_for_user_url“ ,“middleware_stack =”,“dom_class”,“write_fragment”,“new_video”,“retrieve_response_from_mimes”,“_ layout_conditions?”,“rails_info_properties_url”,“to_param”,“hash_for_users_path”,“javascripts_dir”,“缓存”,“root_url” ,“extend”,“new”,“enum_for”,“video_votes_url”,“javascripts_dir =”,“localize”,“request_http_digest_authentication”,“user_url”,“send_file”,“dom_id”,“污染?”,“通知” ,“hash_for_new_video_path”,“respond_with”,“env”,“to_query”,“load”,“consideration_all_requests_local”,“untaint”,“users_path”,“render_to_string”,“try”,“env =”,“headers”, “hash_for_login_path”,“Conside_all_request s_local =“,”instance_of?“,”view_runtime“,”`“,”require_association“,”headers =“,”hash_for_session_path“,”send_data“,”decode64“,”new_video_path“,”default_url_options?“,”view_runtime =“ “,”_helpers?“,”logger“,”instance_values“,”require“,”hash_for_users_url“,”冻结“,”stylesheets_dir“,”rescue_handlers?“,”login_path“,”logger =“,”kind_of?“, “status”,“hash_for_new_video_vote_path”,“stylesheets_dir =”,“response”,“suppress_warnings”,“session_path”,“controller_name”,“hash_for_new_video_url”,“status =”,“controller_path”,“response =”,“action_has_layout = “,”instance_variable_names“,”collect_mimes_from_class_level“,”users_url“,”l“,”edit_polymorphic_url“,”authenticate_or_request_with_http_basic“,”request_forgery_protection_token“,”render_to_body“,”run_callbacks“,”hash_for_login_url“,”video_path“,”is_a?“ ,“new_video_vote_path”,“method”,“request_forgery_protection_token =”,“load_dependency”,“db_runtime”,“hash_for_session_url”,“tap”,“frozen?”,“new_video_url”,“_ helper_methods?“,”copy_instance_variables_from“,”url_for“,”alert“,”to_a“,”page_cache_directory“,”db_runtime =“,”flash“,”login_url“,”rescue_action“,”page_cache_directory =“,”_ handle_render_options“, “polymorphic_url”,“hash_for_new_video_vote_url”,“display”,“expire_fragment”,“taguri”,“cleanup_view_runtime”,“session_url”,“close_facebox”,“location”,“default_render”,“to_s”,“silence_warnings”,“taguri =“,”helpers_path“,”request“,”edit_polymorphic_path“,”hash_for_new_user_path“,”action_name“,”_ view_paths“,”location =“,”hash“,”authenticate_or_request_with_http_token“,”initialize_template_class“,”helpers_path =“,” request =“,”new_video_vote_url“,”action_name =“,”_ view_paths =“,”rescue_with_handler“,”require_library_or_gem“,”expire_page“,”to_yaml_style“,”middleware_stack?“,”redirect_from_facebox“,”root_path“,”allow_forgery_protection“ ,“hash_for_edit_video_path”]

这是我的整个Sessions控制器:

 class SessionsController  'new' end def destroy reset_session redirect_to videos_path end end end 

看起来我搞砸了我的Sessions控制器中的end的位置导致我的destroy方法不起作用……

我不得不将我的Sessions控制器更改为:

 class SessionsController < ApplicationController def create if user = User.authenticate(params[:email], params[:password]) session[:user_id] = user.id redirect_to videos_path else flash.now[:alert] = "Invalid login/password combination" render :action => 'new' end end def destroy reset_session redirect_to videos_path end end 

尝试更改此行:

 match '/logout' => "sessions#destroy", :as => "logout" 

并使它看起来像这样:

 get '/logout' => "sessions#destroy", :as => "logout" 

它是相同的路线,但它只会响应获取此特定操作的请求。

好的,我想我明白了

将routes.rb更改为

 resources :sessions 
Interesting Posts