Rails 3 Devise Customize Redirection для регистрации - PullRequest
1 голос
/ 12 марта 2012

Я использую Devise 1.5.3.

Я унаследовал Devise::RegistrationsController для настройки собственного пути для after_update:

class RegistrationsController < Devise::RegistrationsController
   protected
   def after_update_path_for(resource)
     some_path
   end 
end

После этого Rails пытается найти представления для действий регистрации (new, create и т. Д.)) в views/registrations/, но не в /views/devise/registrations

Конечно, я могу скопировать все из /views/devise/registrations в views/registrations/.Но это не подходит для меня, потому что остальная часть моего взгляда (для не настроенных контроллеров) все еще находится в /views/devise/registrations.

Как я могу это исправить?

Ответы [ 3 ]

2 голосов
/ 12 марта 2012

Я думаю, что это должно работать, если вы поместите ваш RegistrationsController в область действия Devise:

class Devise::MyRegistrationsController < Devise::RegistrationsController
  # ...
end

Конечно, вы не можете использовать то же имя для RegistrationsController, и вы переименовали папку views/devise/registrations в views/devise/my_registrations и вам также нужно обновить файл rout.rb ... но с этой настройкой он должен работать ...

Другой вариант, я думаю, будет перезаписать / внедрить метод в инициализаторе:

class Devise::RegistrationsController
  protected
  def after_update_path_for(resource)
    some_path
  end 
end

, что может быть проще ...

1 голос
/ 03 апреля 2014

Принятый ответ @Vapire не работает для меня в Rails 4. Мне пришлось переопределить контроллер Devise Passwords следующим образом:

# users/passwords_controller.rb
class Users::PasswordsController < Devise::PasswordsController
 protected
 def after_resetting_password_path_for(resource)
  signed_in_root_path(resource)
 end
end

Документация по этому методу здесь: https://github.com/plataformatec/devise/wiki/How-To:-redirect-to-a-specific-page-on-successful-sign-in

1 голос
/ 27 сентября 2013

Опираясь на ответ Vapire. Я думаю, что вариант ввода самый простой / лучший.

Поскольку я хочу включить постоянное «Изменить мою регистрацию» в панель навигации, чтобы его можно было вызывать с любой страницы, я также хочу отправить пользователя обратно на страницу, с которой он нажал.

Я нашел простой способ сделать это - переопределить некоторые действия контроллера и использовать переменную сеанса для захвата ссылающегося пути. Использование переменной сеанса сохраняет путь реферера нетронутым, если необходимо перезагрузить форму для исправления ошибок.

routes.rb

devise_for :users, :controllers => {:registrations=>'users/registrations'}

Контроллеры / пользователи / registrations_controller.rb

class Users::RegistrationsController < Devise::RegistrationsController
  def edit
    session[:called_from]=request.referer 
    super #revert to standard behaviour
  end

  def after_update_path_for(resource)
    session[:called_from] #returns to the page called from
  end

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