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

Devise gem的update方法已经有一个重定向。然后你调用你的重定向,这会导致错误。如果你想做一个自定义重定向,你需要重写一个没有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 回答