设计软删除记录的问题。任何想法,如何解决?

时间:2019-05-29 14:29:20

标签: ruby-on-rails ruby devise soft-delete devise-confirmable

我正在使用丢弃宝石删除 Soft 。一旦用户被软删除,用户仍然可以收到忘记密码的电子邮件。因为Devise密码控制器不在乎其软删除与否?

我正在使用以下Devise模块,看来,我可能需要修复所有模块:-

  • :可确认,
  • :可恢复,
  • :超时,
  • :可跟踪
  • :可锁定
  • :可认证

尽管我可以通过覆盖用户模型中的find_for_authentication方法来解决登录问题,但可验证性,但这似乎不适用于其他Devise模块。

任何想法,我如何使用Devise解决软删除问题?

我正在使用设计(4.6.2),丢弃(1.0.0),Rails 5.1.6.2

2 个答案:

答案 0 :(得分:1)

最后,我可以通过覆盖user.rb中的以下方法来修复它。如果遇到相同的问题,任何其他人都可以通过以下方式解决:

# Override to add condition to ignore soft deleted users
def self.find_first_by_auth_conditions(conditions, opts = {})
  opts.reverse_merge!(discarded_at: nil)

  super
 end

答案 1 :(得分:0)

您可以使用默认范围,例如:

class User
  ...
  default_scope -> { kept }
  ...
end

其他丢弃范围(例如,discarded和with_discarded)应继续工作,因为它们作用于同一列(discard_column),因此它们将覆盖默认范围。这样一来,就无需覆盖任何devise方法