gpt4 book ai didi

ruby-on-rails - Ruby on Rails/Devise - 重置密码时绕过模型中的自定义验证选项

转载 作者:行者123 更新时间:2023-12-04 04:52:21 24 4
gpt4 key购买 nike

在我的项目中,我更改了 Devise 中的注册表单,以通过访问者添加 :agree 选项(用户必须接受服务条款才能注册等)。如果他们不同意,则不会生效。

当用户在寻找 :agree 验证时尝试编辑他们的帐户信息时,这导致了一个问题,但我能够添加一个“除非”子句并添加另一个名为 :signed_in 的访问器,该访问器在 Controller 中定义(我不能” t 弄清楚如何让模型来确定用户是否已登录,设计的助手在其中对我不起作用)。我的 User 模型和 users_controller 的相关部分看起来像......

用户名

validates :agree, :term_agreement => TRUE, :unless => :signed_in

用户 Controller .rb
def update
@user = User.find(params[:id])

if user_signed_in?
@user.signed_in = params[:user]
end

[...]
end

所以,一切正常......当用户已经登录时,“同意”验证覆盖。但是,我必须找出覆盖另一个场景的最佳方法......当用户重置密码并需要更改时它。

我正在测试用户帐户并尝试在一个帐户上重置我的密码,但是我遇到了 :agree 验证……现在我必须想办法覆盖它。我注意到更改您的密码表单有一个隐藏字段值 :reset_password_token,但是我尝试了 :unless => :reset_password_token 但它不起作用。

那么实现这一目标的最佳方法是什么?最重要的是,我怎么能有一个/或条件(除非:signed_in 或 :reset_password 等)用于该 :unless 子句?

最佳答案

那么,您需要在创建记录时验证是否接受条款?

class User < ActiveRecord::Base
validates :agree, :acceptance => true, :on => :create
end
:on => :create只会在创建记录时执行该验证——很像布兰登的回答,但没有多余的代码。

这也将避免您的 Controller 担心用户是否已登录。

关于ruby-on-rails - Ruby on Rails/Devise - 重置密码时绕过模型中的自定义验证选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5762009/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com