Ruby on Rails:路由问题:在link_to中没有看到动作

只是尝试使用authlogic设置一些基本链接。 他们来了

 
:user_sessions, :action => :destroy %>

同样奇怪的是, destroy_user_session_path不存在,而且我更喜欢使用它。 但是当我点击Logout Link时,它只需要我到localhost:3000/user_sessions/

这是我的user_sessions控制器:

 class UserSessionsController  [: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" 

在您的视图中执行此操作:

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

你不能只有一个destroy_user_session_path方法的原因是因为那将是一个GET请求,它破坏了RESTful路由约定。 GET请求仅用于检索数据,而不是创建,更新或销毁数据。

这应该可以解决您的问题。

对于UPDATE和DELETE,您需要提供方法作为参数:

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

我认为你应该使用:

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

请注意单个控制器…