如何在&after -update_path_for'之后重定向到相同的网址在轨道上设计红宝石

时间:2016-04-06 17:44:40

标签: ruby-on-rails ruby ruby-on-rails-4 devise

我想在更新密码后重定向到同一页面。 我有两种观点:

  • edit.html.haml(account_path)

  • edit_password.html.haml(account_change_password_path)

当我更新帐户(编辑或edit_password)时,它会将我重定向到根页面(我想重定向到同一页面)。

当我尝试在edit_password视图中更改密码(有错误)时,它会在"编辑视图"中显示设计错误。 (它应该显示edit_password视图中的设计错误。)

我试图用以下方法解决这个问题:

class RegistrationsController < Devise::RegistrationsController
 # ...

 protected
 def after_update_path_for(resource)
  redirect_to :back
 end
end

但它不起作用。

如何将其重定向到同一个网址?

1 个答案:

答案 0 :(得分:0)

你几乎是对的。因此,设计的路径助手after_sign_up_pathafter_sign_in_pathafter_update_path需要一个URL,特别是一个字符串。

其他人点击此页面:更新工作后的关键是:

  1. 创建注册控制器以覆盖after_update_path方法(请参阅有关如何执行此操作的文档:https://github.com/plataformatec/devise#configuring-controllers
  2. 在自定义注册控制器的after_update_path部分添加方法protected
  3. 添加路径,作为字符串或存储的字符串作为该方法中唯一输出的元素
  4. 如果您想重定向回到您来自的网页,请执行以下示例:

    class RegistrationsController < Devise::RegistrationsController
     # ...
     protected
     def after_update_path_for(resource)
          request.referrer || edit_user_registration_path
     end
    end
    

    因此,如果用户在edit_password_path上,则会将其带回那里。但是,如果安全良知用户使用防病毒软件或不遵循软件从浏览器中删除引荐来源,那么您的备份就是将用户带到完整的注册路径。