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