找不到“破坏"操作,但是就在那里...奇怪的错误 [英] Can't find the the 'destroy' action, but it's there... weird error

查看:71
本文介绍了找不到“破坏"操作,但是就在那里...奇怪的错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的应用似乎无法在我的Sessions控制器中找到破坏"操作.很奇怪,因为它在那里.

My app can't seem to find the 'destroy' action in my Sessions controller. Weird, because it's there.

我有这样的链接:

<%= link_to "Logout", logout_path %>

我在 routes.rb 中路由到我的销毁动作:

Which I route to my destroy action in routes.rb:

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

这是我的会话控制器中的破坏"操作:

And here is the 'destroy' action in my sessions controller:

def destroy
  reset_session
  redirect_to videos_path
end

当我单击链接时,我的日志中出现此错误:

When I click the link, I get this error in my logs:

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):

这是怎么回事?

更新:

这是我的route.rb文件:

Here's my routes.rb file:

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_lookupy","allow_allow""view_context","protected_instance_variables =","asset_path =","default_url_options","authenticate_with_http_token"," id ","content_type =","assign_shortcuts","_ routes","_ save_fragment","default_url_options =,"hash_for_new_session_path","redirect_to_facebox","edit_video_path","_ layout_conditions","enable_warnings","new_polymorphic_path","request_http_basic_authentication","hash_for_new_user_auth","request_http_basic_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"?","hash_for_edit_video_url","asset_host"","_ renderers?","to_json","singleton_methods","page_cache_extension","authenticate","new_user_url","nil?","asset_host =,"responder","logout_path","action_methods",格式","prepend_view_path","edit_video_vote_path","_ handle_method_missing","page_cache_extension =,"_ one_time_conditions_valid_16?","protect_against_forgery?","rescue_handlers","responder =","hash_fornew_"," perform_caching," require_dependency," verify_authenticity_token," edit_video_url," to_yaml_properties," form_authenticity_token," rescue_handlers =," with_options," protected_methods," silence_stderr," perform_ca?",可复制的商品","hash_for_logout_url","mimes_for_respond_to","hash_for_edit_video_vote_url","_ render_option_json","record_key_for_dom_id","class_eval","append_info_to_pay_for","to_respond","to_session","res_session"响应者?","private_methods","silence_stream","hash_for_edit_user_path",发送","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",_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","ashash","instance_able_s""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 _","unableable","instance"","encode64",调度",存在?","edit_user_url","videos_path","==,"hash_for_rails_info_properties_path",状态","h"ead","_ view_paths?","===,"clone","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?",调试器","instance_variable_set","response_body =","_ local _","_ local _","_ local_request","=〜","_ helper_methods","access_denied","hash_for_videos_url",创建","rails_info_properties_path","dup","cache_store","polymorphic_path","locale =","hash_for_video_vote_url","_ helper_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_rail"s_info_properties_url","template_exists?","send_action","returning","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",","root_url","extend","new","enum_for","video_votes_url","javascripts_dir =,"localize","request_http_digest_authentication","user_url","send_file","dom_id",污染?","notice","hash_for_new_video_path","respond_with","env","to_query","load","consider_all_requests_local","untaint","users_path","render_to_string","try","env =,标题","hash_for_login_path","consider_all_requests_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?",状态","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","is_a?","new_video_vote_path",方法","request_forgery_protection_token =","load_dependency","db_runtime","hash_for_session_url",点击",冻结?","new_video_url","_ helper_methods","copy_instance_variables_from","url_for",警报","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"","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"]

["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", "_routes", "_save_fragment", "default_url_options=", "hash_for_new_session_path", "redirect_to_facebox", "edit_video_path", "_layout_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=", "send", "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", "singleton_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=", "_one_time_conditions_valid_16?", "protect_against_forgery?", "rescue_handlers", "responder=", "hash_for_new_session_url", "breakpoint", "formats=", "perform_caching", "require_dependency", "verify_authenticity_token", "edit_video_url", "to_yaml_properties", "form_authenticity_token", "rescue_handlers=", "with_options", "protected_methods", "silence_stderr", "perform_caching=", "equal?", "duplicable?", "hash_for_logout_url", "mimes_for_respond_to", "hash_for_edit_video_vote_url", "_render_option_json", "record_key_for_dom_id", "class_eval", "append_info_to_payload", "new_session_url", "mimes_for_respond_to=", "callback", "responder?", "private_methods", "silence_stream", "hash_for_edit_user_path", "send", "hash_for_root_path", "html_safe?", "performed?", "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", "present?", "edit_user_url", "videos_path", "==", "hash_for_rails_info_properties_path", "presence", "head", "_view_paths?", "===", "clone", "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", "_helper_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", "stale?", "render_to_facebox", "read_fragment", "videos_url", "acts_like?", "allow_concurrency", "hash_for_rails_info_properties_url", "template_exists?", "send_action", "returning", "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", "cache", "root_url", "extend", "new", "enum_for", "video_votes_url", "javascripts_dir=", "localize", "request_http_digest_authentication", "user_url", "send_file", "dom_id", "tainted?", "notice", "hash_for_new_video_path", "respond_with", "env", "to_query", "load", "consider_all_requests_local", "untaint", "users_path", "render_to_string", "try", "env=", "headers", "hash_for_login_path", "consider_all_requests_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", "freeze", "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控制器:

Here's my entire Sessions controller:

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

    def destroy
      reset_session
      redirect_to videos_path
    end
  end
end

推荐答案

似乎我弄乱了Sessions控制器中 end 的位置,这导致我的destroy方法无法正常工作...

It looks like I messed up the placement of end in my Sessions controller that was causing my destroy method to not work...

我必须将Sessions控制器更改为:

I had to change my Sessions controller to:

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

这篇关于找不到“破坏"操作,但是就在那里...奇怪的错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆