Добавление нового действия для разработки 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':

то в контроллере у меня есть действие подписи, но когда я перехожу на myurl.com/accounts/signedup, который в настоящее время имеет только:

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

Затем я перехожу на myurl.com/accounts/signedup, я получаю:

AbstractController::ActionNotFound (AbstractController::ActionNotFound):

Но если я удалю def-регистрацию с контроллера, я получаю:

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

Любая идея, что не так?

Ответы

Ответ 1

Решение было:

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

Ответ 2

Ваш ответ верен, но последние версии разработки не рекомендовали это поведение:

Передача блока в devise_for устарела. Удалите блок из devise_for (только блок, вызов devise_for должен все еще существовать) и вызовите devise_scope: user do... завершите блок вместо этого.

Судя по тому, что вы опубликовали, в вашем случае вы, вероятно, должны использовать after_sign_in_path_for в своем настраиваемом RegistrationsController.

Вот что я использовал в своем проекте в качестве альтернативы:

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

Ответ 3

Используя следующее (убедитесь, что оно не множественное, или вы получите ошибку выше).

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

Затем вы можете изменить devise_for, как обычно, если вам нужно передать пользовательские контроллеры.

devise_for: users