这里的一个初级问题:如何在注册中设置单独的路线,以便如果电子邮件存在但具有deleted_at标记,则可以重新激活它?
我正在使用带有Ruby on Rails应用程序的Devise,我想为用户进行软删除。如果他们改变主意并回到网站,我希望他们能够获得他们的信息。
说明here非常适合删除帐户。我的registration.rb文件现在包括:
def soft_delete
update_attribute(:deleted_at, Time.current)
end
ensure user account is active
def active_for_authentication?
super && !deleted_at
end
def inactive_message
!deleted_at ? super : :deleted_account
end
我创建了一个自定义注册控制器,包括:
class Registrations::RegistrationsController < Devise::RegistrationsController
def destroy
resource.soft_delete
Devise.sign_out_all_scopes ? sign_out : sign_out(resource_name)
set_flash_message :notice, :destroyed
yield resource if block_given?
respond_with_navigational(resource){ redirect_to after_sign_out_path_for(resource_name) }
end
end
不幸的是,当我尝试重新激活它时,登录功能的行为就好像电子邮件不存在(不登录),并且注册功能就像电子邮件确实存在一样(说, “已有人带走了”)。
This answer提到创建自定义方法(我做过):
def reactivate_user
update_attribute(:deleted_at, nil)
registration_session_path
end
但也创建了一条单独的路线。我不确定Devise如何或在哪里做到这一点。
任何帮助表示赞赏!