添加新动作来设计registrations_controller

我的主要设计路线是:

devise_for :accounts, :controllers => { :registrations => "users/accounts/registrations", :sessions => "accounts/devise/sessions" }, :class_name => 'Admin' 

然后我想要一个新的url / action,所以我在上面的devise_for行之前添加以下内容:

 match '/accounts/signedup/' => 'users/accounts/registrations#signedup': 

然后在控制器中我有signedup动作,但当我去myurl.com/accounts/signedup,目前只有:

 def signedup Rails.logger.debug { "&& signed_up" } end 

然后我去myurl.com/accounts/signedup我得到:

 AbstractController::ActionNotFound (AbstractController::ActionNotFound): 

但是,如果我从控制器中删除def signedup,我会得到:

 The action 'signedup' could not be found for Users::Accounts::RegistrationsController" 

知道什么是错的吗?

您的答案是正确的,但最新版本的设计已弃用此行为:

不推荐将块传递给devise_for。 请从devise_for中删除该块(只有块,对devise_for的调用必须仍然存在)并调用devise_scope:user do …以块结束。

根据您发布的内容判断,在您的情况下,您应该在自定义RegistrationsController中使用after_sign_in_path_for

以下是我在项目中使用的替代方法:

  devise_scope :user do get 'session/on_signin', :to => 'sessions#memorize_session' end 

解决方案是:

 devise_for :accounts, :controllers => { :registrations => "users/accounts/registrations", :sessions => "accounts/devise/sessions" }, :class_name => 'Admin' do get "accounts/signedup", :to => "users/accounts/registrations#signedup", :as => "signedup_registration" end 

使用以下(确保它不是复数或你将得到上面的错误)。

 devise_scope :user do get 'session/on_signin', :to => 'sessions#memorize_session' end 

然后,如果需要传递自定义控制器,则可以照常修改devise_for。

devise_for:用户