【发布时间】:2011-11-28 21:09:06
【问题描述】:
我有一个User 模型,在哪里进行以下验证
validates :username, :presence => true, :uniqueness => true
validates :email, :presence => true, :uniqueness => true
validates :password, :confirmation => true
validates_presence_of :password, :on => :create
validates_presence_of :bnet_username, :on => :update
validates_presence_of :bnet_code, :on => :update
bnet_username 和 bnet_code 仅更新的原因是因为我在添加这些字段时已经有现有用户并且它们不在注册表单中,所以我只需要用户设置它们一次'在网站上重新注册。
但是有一个问题,那就是没有设置bnet_username 和bnet_code 的用户尝试重置他的密码。在这种情况下,PasswordResetController 会尝试更新他的属性,但验证会失败。
if @user.update_attributes(params[:user])
redirect_to root_url, :notice => "Password has been reset! You can now log in."
...
问题是,当用户尝试重置密码时我需要验证密码,但我不想在他只是更新他的个人资料时验证它。
我也不能在密码重置时一起跳过验证,因为我需要验证密码本身。
是否有任何简单的解决方案来说明我需要运行哪些验证?还是我完全错了?
edit:基本上只有一种情况会导致问题。尚未设置bnet_username 和bnet_code 的现有用户,但他想更改密码。
由于密码更改是一项更新操作,它将触发对bnet_username 和bnet_password 的验证。但我只需要在更新时设置它们,因为我希望用户在编辑他们的个人资料时设置它们。
用户注册时不是必填字段,但在尝试更新个人资料信息时必须设置。
【问题讨论】:
-
请在“但我不想在他刚刚更新他的个人资料时验证它”。我自己在那里陷入了一些有趣的逻辑,问题的其他部分是关于是否设置了 2 个 bnet 字段,不确定哪个优先。
-
@MichaelDurrant 检查编辑
标签: ruby-on-rails ruby ruby-on-rails-3 validation