添加新动作来设计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:用户