Ответ 1
Вы проверили свой show_cities_path, выполнив rake routes
? Возможно, стоит взглянуть на https://github.com/plataformatec/devise/wiki/How-To:-Change-the-redirect-path-after-destroying-a-session-i.e.-signing-out
В маршрутах у меня есть указатель на корневой путь "home#index"
, но когда я пытаюсь переопределить это с помощью after_sign_up_path_for, перенаправление меня к корневому пути при входе или регистрации. Я попытался установить его как в разработке подкласса контроллера, так и в application_controller, но это не сработало. Что мне нужно сделать здесь?
Контроллер приложений
class ApplicationController < ActionController::Base
protect_from_forgery
def after_sign_up_path_for(resource)
show_cities_path(resource)
end
end
контроллер регистрации
class RegistrationsController < ApplicationController
def after_sign_up_path_for(resource)
show_cities_path(resource)
end
end
маршруты
root :to => "home#index"
Вы проверили свой show_cities_path, выполнив rake routes
? Возможно, стоит взглянуть на https://github.com/plataformatec/devise/wiki/How-To:-Change-the-redirect-path-after-destroying-a-session-i.e.-signing-out
Если у вас также включен модуль Confirmable, вы должны переопределить after_inactive_sign_up_path_for
, поскольку новая регистрация "неактивна" до тех пор, пока не будет подтверждена. after_sign_up_path_for
, похоже, не вызван, когда Подтверждающий активен.
Хотя я опаздываю на игру, я просто столкнулся с этой проблемой и не смог найти решение.
Если вы используете собственный RegistrationsController для настройки Devise, вам необходимо добавить метод after_sign_up_path_for (resource) к этому контроллеру вместо ApplicationController.
В registrations_controller.rb:
private
def after_sign_up_path_for(resource)
new_page_path
end
Я боролся с этой проблемой, пока не осознал, что забыл объявить, что я занимаюсь разработкой контролера регистрации. В моем случае я использую devuse с ресурсом user: поэтому я добавил это в route.rb:
devise_for :users, :controllers => {:registrations => "registrations"}
После этого перенаправление, указанное мной в after_inactive_sign_up_path_for, работало.
Переопределить контроллер регистрации версий имеет более полное обсуждение этой темы с альтернативными способами объявления переопределений.
Спасибо за ваш намек: after_inactive_sign_up_path_for Это действительно ценно, но я обнаружил странную ситуацию, как показано ниже.
Я также написал об этом здесь: http://datefield.blogspot.com/2012/05/rails-devise-allow-user-from-facebook.html
Я только что взорвал около 2 часов, но LiveReload был моей проблемой. Я был перенаправлен успешно, но LiveReload собирал изменения на development.sqllite и отменял запрос.
На самом деле, мы можем просмотреть исходный код решения, чтобы решить проблему, и это легко.
devise-3.4.1 $ vim app/controllers/devise/registrations_controller.rb
# POST /resource
def create
build_resource(sign_up_params)
resource_saved = resource.save
yield resource if block_given?
if resource_saved
if resource.active_for_authentication?
set_flash_message :notice, :signed_up if is_flashing_format?
sign_up(resource_name, resource)
respond_with resource, location: after_sign_up_path_for(resource)
else
set_flash_message :notice, :"signed_up_but_#{resource.inactive_message}" if is_flashing_format?
expire_data_after_sign_in!
respond_with resource, location: after_inactive_sign_up_path_for(resource)
end
else
clean_up_passwords resource
@validatable = devise_mapping.validatable?
if @validatable
@minimum_password_length = resource_class.password_length.min
end
respond_with resource
end
end
Как показано в коде:
if resource.active_for_authentication?
...
respond_with resource, location: after_sign_up_path_for(resource)
else
...
respond_with resource, location: after_inactive_sign_up_path_for(resource)