Как изменить redirect_to в devise с пользовательским контроллером?

#ruby-on-rails #ruby #devise #ruby-on-rails-6

#ruby-on-rails #ruby #разработка #ruby-on-rails-6

Вопрос:

Я использую devise с пользовательским контроллером (пользовательским контроллером). Вместо того, чтобы входить в систему и переходить user/edit , я предпочитаю обслуживать домашнюю страницу. Для этого мне нужно отредактировать метод devise session create controller.

Я знаю, что могу редактировать пользовательский контроллер devise, следуя инструкциям, которые предоставляет devise:

   # before_action :configure_sign_in_params, only: [:create]

  # GET /resource/sign_in
  # def new
  #   super
  # end

  # POST /resource/sign_in
  # def create
  #   super
  # end

  # DELETE /resource/sign_out
  # def destroy
  #   super
  # end

  # protected

  # If you have extra params to permit, append them to the sanitizer.
  # def configure_sign_in_params
  #   devise_parameter_sanitizer.permit(:sign_in, keys: [:attribute])
  # end

 

Итак, следуя этим инструкциям, как мне просто заставить create метод делать именно то, что он делает в данный момент, redirect_to "/" а не то, что он делает в данный момент?

Обратите внимание, вот что он делает в настоящее время:

 self.resource = resource_class.new(sign_in_params)
clean_up_passwords(resource)
yield resource if block_given?
respond_with(resource, serialize_options(resource))
 

Также обратите внимание, что я мог бы скопировать этот код непосредственно из devise на github, а затем отредактировать его, например:

 self.resource = resource_class.new(sign_in_params)
clean_up_passwords(resource)
yield resource if block_given?
redirect to: "/"
 

но я хочу сделать это с помощью super метода, поскольку это рекомендуется в инструкциях по разработке.

Комментарии:

1. Вы пробовали after_sign_in_path_for для Devise helper?

Ответ №1:

Нет необходимости переопределять create действие, поскольку Devise позволяет вам делать именно это с after_sign_in_path_for помощью метода.

 def after_sign_in_path_for(resource)
  root_path
end