如何同时覆盖Devise控制器和设计路由?

我使用Rails 4.0.2和Devise 3.2.2来处理用户注册/身份validation。

我用谷歌搜索并搜索stackoverflow的答案,无法找到能够回答我问题的东西。

下面的代码是我的routes.rb ,我已经跳过所有会话路由和注册路由但由于某种原因,Devise没有使用我的自定义registrations_controller.rb,因为如果是,它应该重定向到/ pages / success(请参见下面我的registrations_controller.rb)

的routes.rb

App::Application.routes.draw do resources :posts resources :questions get "users/:id", to: "users#show" devise_for :users, :controllers => {:registrations => "registrations"}, :skip => [:sessions, :registrations] as :user do get 'login' => 'devise/sessions#new', :as => :new_user_session post 'login' => 'devise/sessions#create', :as => :user_session delete 'signout' => 'devise/sessions#destroy', :as => :destroy_user_session end as :user do get '/' => 'devise/registrations#new', :as => :new_user_registration post 'register' => 'devise/registrations#create', :as => :user_registration end get "registrations/update" get "pages/home" get "pages/privacy" get "pages/terms" get "pages/success" end 

registrations_controller.rb

 class RegistrationsController < Devise::RegistrationsController protected def after_inactive_sign_up_path_for(resource) '/pages/success' end end 

您可能有几个潜在的问题:


跳跃

如果你正在跳过注册function,我想它会阻止Devise调用你的RegistrationsController

我会亲自这样做(纠正你的路线):

 #config/routes.rb root to: "users#index" (where ever your "logged-in" page is) devise_for :users, path: "", controllers: { sessions: "sessions", registrations: "registrations" }, path_names: { sign_in: 'login', password: 'forgot', confirmation: 'confirm', unlock: 'unblock', sign_up: 'register', sign_out: 'signout'} 

这将为您提供所需的路线,并将路由到您应用中的“经过身份validation的”索引页面,从而显示Devise的登录或注册页面


定义

您可能遇到的另一个问题是您的Devise Registrations控制器的定义不正确。 我们在最近的开发应用程序中使用此代码:

 #app/controllers/registrations_controller.rb class RegistrationsController < ::Devise::RegistrationsController end 

也许您可以尝试在Devise::RegistrationsController之前使用Devise::RegistrationsController来查看它是否调用?