Ruby on rails 铁路及;设计-如何确定用户何时注销?
在我的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]更新的时间” 因此,正如您所看
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