0

私はこのコントローラコードを持っています:

  def update

    super
    respond_to do |format|
      format.html{redirect_to session[:redirect_to]}
    end
  end

私のクラスは、次のようにデバイスのパスワードを継承します。

class Mobile::PasswordsController < Devise::PasswordsController

そして、私はこのエラーを受け取ります:

AbstractController::DoubleRenderError in Mobile::PasswordsController#update

    Render and/or redirect were called multiple times in this action. 
Please note that you may only call render OR redirect, and at most once per action. 
Also note that neither redirect nor render terminate execution of the action, so 
if you want to exit an action after redirecting, you need to do something like 
"redirect_to(...) and return".

どうすればいいですか?リダイレクトは知っていますが、正しくする方法がわかりません。

ありがとう!

4

1 に答える 1

2

updateDevise gemメソッドには既にリダイレクトがあります。次に、リダイレクトを呼び出すと、エラーが発生します。カスタム リダイレクトを行いたい場合は、次のsuperような呼び出し を行わずに Devise メソッドをオーバーライドする必要があります。

def update
    self.resource = resource_class.reset_password_by_token(params[resource_name])

    if resource.errors.empty?
      flash_message = resource.active_for_authentication? ? :updated : :updated_not_active
      set_flash_message(:notice, flash_message) if is_navigational_format?
      sign_in(resource_name, resource)
      respond_with resource, :location => #your_path_on_success
    else
      flash[:error] = resource.errors.full_messages
      redirect_to #your_path_on_failure
    end
  end
于 2012-05-02T17:40:40.433 に答える