Rails 6.0 在为一种用户创建和更新时验证密码是不是存在,但只为另一种用户更新
Posted
技术标签:
【中文标题】Rails 6.0 在为一种用户创建和更新时验证密码是不是存在,但只为另一种用户更新【英文标题】:Rails 6.0 validate password presence on create and update for one type of user but only update for anotherRails 6.0 在为一种用户创建和更新时验证密码是否存在,但只为另一种用户更新 【发布时间】:2021-07-17 00:13:33 【问题描述】:我有一个具有以下属性的User
模型:
id: integer
username: string
email: string
password_hash: string
password_salt: string
account_type: string
...
我的目标是在创建和更新时验证用户的密码。
当创建或更新具有account_type: 'a'
的用户时,我想运行validates :password, :password_confirmation, presence: true
。
当account_type: 'b'
的用户得到更新时,我想验证password
和password_confirmation
的存在是否为真,但不是在用户被创建时。
如果更多代码或更清晰的解释会有所帮助,请告诉我。提前致谢。
【问题讨论】:
所以对于用户 account_type b 不应该发生任何验证(至少关于存在?) 我想验证 account_type b 用户的密码是否存在,但仅在更新时,而不是在创建时。 "有时仅在满足给定谓词时才验证对象是有意义的。您可以使用 :if 和 :unless 选项来做到这一点,它们可以采用符号、Proc 或数组。当你想指定何时应该进行验证时,可以使用 :if 选项。如果你想指定何时不应该进行验证,那么你可以使用 :unless 选项。 guides.rubyonrails.org/… 【参考方案1】:validates :password, :password_confirmation, presence: true, unless: -> |user| user.account_type == 'b' && user.new_record?
【讨论】:
你可以用user.new_record?
代替on: :update
guides.rubyonrails.org/active_record_validations.html#on
@max 如果他想使用 on: :update 他会输掉 :create 案例,对吧?他至少不能使用一个班轮
啊,你是对的。它只会在更新时应用验证。
@Joel_Blum 确实有效!谢谢你们俩的帮助。以上是关于Rails 6.0 在为一种用户创建和更新时验证密码是不是存在,但只为另一种用户更新的主要内容,如果未能解决你的问题,请参考以下文章
Rails omniauth Google - 如何更新个人资料数据