Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 铁路及;设计-如何确定用户何时注销?_Ruby On Rails_Ruby_Authentication_Devise - Fatal编程技术网

Ruby on rails 铁路及;设计-如何确定用户何时注销?

Ruby on rails 铁路及;设计-如何确定用户何时注销?,ruby-on-rails,ruby,authentication,devise,Ruby On Rails,Ruby,Authentication,Devise,在我的Rails应用程序中,我在提交后有一些on::update回调,负责在用户更新其帐户设置后执行某些工作 问题是,当用户注销时会触发这些回调。我通过调用self查看用户的更新内容。之前的更改,以下是输出: =>{“记住在”=>[Wed,06 May 2020 20:32:09 UTC+00:00,nil]创建的时间,“=>[Thu,07 May 2020 14:52:42 UTC+00:00,Thu,07 May 2020 14:54:40 UTC+00:00]更新的时间” 因此,正如您所看

在我的Rails应用程序中,我在提交后有一些
on::update
回调,负责在用户更新其帐户设置后执行某些工作

问题是,当用户注销时会触发这些回调。我通过调用
self查看用户的更新内容。之前的更改
,以下是输出:

=>{“记住在”=>[Wed,06 May 2020 20:32:09 UTC+00:00,nil]创建的时间,“=>[Thu,07 May 2020 14:52:42 UTC+00:00,Thu,07 May 2020 14:54:40 UTC+00:00]更新的时间”

因此,正如您所看到的那样,注销将在“
处清除“记住创建的”和在“
处更新的”

我可以在用户上创建一个名为
is\u logging\u out?
的方法,检查这两个更改的属性并返回true,但这感觉像是hack-y,我想知道是否有更优雅的方法来实现这一点


(如果有关系,我使用的是Desive v3.5.10)

您真的想首先使用模型回调吗?他们天生就是黑客,控制他们被解雇的时间和地点通常变得越来越困难

如果您只是覆盖控制器,您就可以确切地知道该逻辑将在何处触发,并且它不会减慢您的测试或在测试过程中创建更多意外的错误

class UsersController < Devise::SessionsController
  def update
    super do |user|
      # do something awesome
    end
  end
end

模型回调有这个缺点。我强烈建议不要使用模型回调,而应该使用装饰器或显式调用。 但是,如果您确定需要此回调,那么为什么不尝试跳过回调,除非
记住\u created\u at
不是nil

def your_callback_method
  return unless remember_created_at

  #do stuff
end
您可以在回调方法本身中跳过它,或者将
if:->{record.memory_created_at}
添加到
after_commit
声明中

请不要在模型中添加名为
is\u logging\u?
的方法,因为这不是模型的责任。模型不应该依赖于用户正在进行的操作

def your_callback_method
  return unless remember_created_at

  #do stuff
end