尝试使用authlogic设置一些基本链接。 他们在这里
<% 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 :(得分:5)
在您的观点中执行此操作:
<%= link_to "Log Out", user_session_path, :method => :delete %>
您不能只拥有destroy_user_session_path
方法的原因是因为这将是一个GET请求,它会破坏RESTful路由约定。 GET请求仅用于检索数据,而不是创建,更新或销毁数据。
这可以解决您的问题。
答案 1 :(得分:0)
对于UPDATE和DELETE,您需要将方法作为参数提供:
<%= link_to "Log Out", user_session_path, :method => :delete %>
答案 2 :(得分:0)
我认为你应该改用:
<%= link_to "Log Out", :controller => :user_session, :action => :destroy %>
注意控制器单数......