2010-10-28 109 views
1

試圖用authlogic設置一些基本鏈接。 這裏,他們是Ruby on Rails:路由問題:在link_to中看不到動作

<% if current_user %> 
    <div class="register_new_user"> 
     <%= link_to "Register", new_user_path %> 
    </div> 
    <div class="login_existing_user"> 
     <%= link_to "Log In", new_user_session_path %> 
    </div> 

<% else %> 
    <div class="logout"> 
     <%= link_to "Log Out", :controller => :user_sessions, :action => :destroy %> 
    </div> 
<% end %> 

什麼也奇怪的是,destroy_user_session_path不存在,而這也正是我寧願使用。但是,當我點擊註銷鏈接,它只是需要我localhost:3000/user_sessions/

這裏是我的user_sessions控制器:

class UserSessionsController < ApplicationController 
    before_filter :require_no_user, :only => [:new, :create] 
    before_filter :require_user, :only => :destroy 

    def new 
    @user_session = UserSession.new 
    end 

    def create 
    @user_session = UserSession.new(params[:user_session]) 
    if @user_session.save 
     flash[:notice] = "Login successful!" 
     redirect_back_or_default account_url 
    else 
     render :action => :new 
    end 
    end 

    def destroy 
    current_user_session.destroy 
    flash[:notice] = "Logout successful!" 
    redirect_back_or_default new_user_session_url 
    end 
end 

所以,我很困惑,爲什麼new_user_session_path作品,destroy_user_session_path沒有。

供參考:我的路線:

map.resource :user_session 
    map.resource :account, :controller => "users" 
    map.resources :users 

    map.root :controller => "info", :action => "home" 
    map.connect "/home", :controller => "info", :action => "home" 
+0

你能給我們一個「耙路」輸出嗎?此外,你的if/else在視圖中是向後的:如果當前用戶,你希望他們能夠註銷,否則,註冊/登錄 – brad 2010-10-28 15:25:59

+0

這些都不會影響你的問題,但Jaime的回答是正確的 – brad 2010-10-28 15:28:45

回答

5

在你看來這樣做:

<%= link_to "Log Out", user_session_path, :method => :delete %> 

的原因,你不能只是有一個destroy_user_session_path方法,因爲這將是一個GET請求,這打破了RESTful路由約定。 GET請求僅用於檢索數據,而不是創建,更新或銷燬數據。

這應該解決您的問題。

0

對於UPDATE和DELETE您需要提供方法作爲參數:

<%= link_to "Log Out", user_session_path, :method => :delete %> 
0

我認爲你應該使用:

<%= link_to "Log Out", :controller => :user_session, :action => :destroy %> 

通知控制器奇異......

+0

這將無法正常工作,它仍然向僅響應DELETE請求的操作發送GET請求。 – 2010-10-28 15:37:35