编辑Devise RegistrationController

时间:2014-10-02 14:05:01

标签: ruby-on-rails-4 devise

据我所知,我在rails 4上使用最新的设计gem,因此它不会自动创建可在Controllers文件夹中查看的注册控制器。

据我所知,你可以将自己的东西扩展到隐藏的那个。这就是我做这个时所做的事情,以便用户被重定向到某个地方:

registrations_controller.rb

class RegistrationsController < Devise::RegistrationsController
  protected

  def after_sign_up_path_for(resource)
    edit_profile_path(current_user.id)
  end

end

这很有效。

然后我决定改变他们销毁帐户时发生的事情。所以我将一些代码复制到我的控制器中并略微编辑:(从https://github.com/plataformatec/devise/blob/master/app/controllers/devise/registrations_controller.rb复制)

def destroy
  resource.destroy
  Devise.sign_out_all_scopes ? sign_out : sign_out(resource_name)
  set_flash_message :notice, :destroyed if is_flashing_format?
  yield resource if block_given?
  respond_with_navigational(resource){ redirect_to after_sign_out_path_for(resource_name), notice: "THIS EDIT IS WORKING" }
end

然而,这没有用。我所做的就是添加通知:在重定向结束时,但是当我登录并“点击取消我的帐户”时,它给了我这个错误:

  

未知操作无法找到操作'destroy'   RegistrationsController

奇怪吧?这就是错误的整个文本。

我做错了什么?或者更重要的是如何添加在销毁注册功能期间执行的代码?

更新:

进一步的故障排除显示,将代码简化为此会返回相同的结果:

class RegistrationsController < Devise::RegistrationsController
  protected

  def after_sign_up_path_for(resource)
    edit_profile_path(current_user.id)
  end

  def destroy
        redirect_to root_path, notice: "Sadly, this isn't working."
  end

end

1 个答案:

答案 0 :(得分:0)

好的,这解决了它,但我不确定它是最安全的选项,如果有更好的方法,请在评论中告诉我。

我所要做的就是将def def从受保护的地方移出。 (我不知道实际上这意味着什么,但它确实有效)。

class RegistrationsController < Devise::RegistrationsController

  def destroy
    resource.destroy
    Devise.sign_out_all_scopes ? sign_out : sign_out(resource_name)
    set_flash_message :notice, :destroyed if is_flashing_format?
    yield resource if block_given?
    respond_with_navigational(resource){ redirect_to "http://google.com" }
  end

  protected

  def after_sign_up_path_for(resource)
    edit_profile_path(current_user.id)
  end

end