Добавление нового действия для разработки регистрации_контроллера - PullRequest
16 голосов
/ 27 января 2011

мой основной маршрут разработки:

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

Затем я хочу новый URL / действие, поэтому я добавляю следующую ДО строки выше 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"

Есть идеи, что случилось?

Ответы [ 3 ]

18 голосов
/ 11 мая 2012

Ваш ответ правильный, но в последних версиях devise это поведение устарело:

Передача блока в 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
13 голосов
/ 28 января 2011

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

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
7 голосов
/ 15 марта 2013

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

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

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

devise_for: users

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...