2012-03-03 49 views
3

我正在将我的access_controller重构为sessions_controller,似乎无法让我的destroy操作正常工作。Rails 3正确地为会话路由销毁操作

登录似乎工作正常,但我无法注销会话。这里是链接我有注销:

<%= link_to("Logout", :controller => "sessions", :action => 'destroy') %> 

的routes.rb

resources :sessions 

sessions_controller.rb

class SessionsController < ApplicationController 

    def new 
    end 

    def create 
    ... 
    end 

    def destroy 
    session[:user_id] = nil 
    flash[:notice] = "You are now logged out" 
    redirect_to root_url 
    end 
end 

当我点击 “注销” 我重定向到“/会话/销毁“,并显示”SessionsController找不到“The action'show”消息。销毁行为似乎想要一个ID,但我不需要传入一个ID,我只是想运行该操作。

+0

见http://stackoverflow.com/questions/2405635/how-to- empty-destroy-a-session-in-rails – junky 2012-03-03 05:44:22

+0

这会告诉我如何完全清空会话(这很有趣),但是我的问题是路由问题。我希望能够在这里使用路线,但使用'资源:会话'部队'/会议/销毁'寻找一个ID。 – 2012-03-03 05:55:14

回答

2

啊,我在这里找到了答案:http://railscasts.com/episodes/250-authentication-from-scratch

我需要设置我的路线如下:

get "log_out" => "sessions#destroy", :as => "log_out" 
get "log_in" => "sessions#new", :as => "log_in" 
resources :sessions 
+0

它对我来说...只是将'match'ajax_logout'改为:'sessions#destroy',via:'get'' TO'get'ajax_logout'=>'sessions#destroy',:as =>'ajax_logout ''一切正常)谢谢你的回答! – Elmor 2013-03-31 09:19:45