Rails设计 - 重置密码时更新错误

时间:2012-05-02 17:01:10

标签: ruby-on-rails ruby devise

我有这个控制器代码:

  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".

知道该怎么办?我知道它的重定向,但我不确定如何使它们正确。

谢谢!

1 个答案:

答案 0 :(得分:2)

Devise gem的

The update method已经有了重定向。然后你调用你的重定向,这会导致错误。如果要进行自定义重定向,则需要覆盖不带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