0

我已经按照 Rails 教程进行操作,并且有一个可以工作的用户系统,但有一件事让我很恼火:保存用户时,即使只是在控制台中,我也必须关闭验证,因为如果没有保存密码和密码确认,它就不会保存,并设置为相同的东西。

这很痛苦,如果我向用户添加其他重要的验证,这似乎有潜在的危险。那么有什么好的方法来处理这个问题吗?真的,我希望仅当更新来自用户而不是我自己的代码时才应用验证。

所以用户模型有这个:

  validates :password, length: { minimum: 6 }
  has_secure_password # this does the hashing, comparisions, etc for us.
  validates :password_confirmation, presence: true

这在创建用户时非常有用,并且在用户编辑他/她的个人资料时非常有用,因为它需要再次输入密码。但是,对于其他编辑,这很烦人。例如:

user = User.find_by_name("bob")
user.reputation = 200
user.save(validate: false) # I really don't want to have to care about password validations here.
4

5 回答 5

3

你可以打电话

@user.save(:validate => false)
于 2012-04-28T11:12:44.520 回答
0

您可以尝试仅在创建时进行验证。这将使密码(或其他变量)仅在注册时才需要,而在您编辑现有用户时则不需要。

于 2012-04-28T15:12:27.327 回答
0

你为什么不为它创建不同的模型,一个用于登录和密码更改的安全模型,以及一个用于其他任何东西的配置文件模型,提供声誉、奖章和其他东西。

在第一个模型中创建新函数可以让你完全忘记第二个,比如

def reputation value
    self.profile.reputation = value
    self.profile.save
end
于 2013-07-09T09:21:56.733 回答
0

如果您想控制跳过验证的属性,您可能需要尝试使用 ValidationSkipper gem:

https://github.com/npearson72/validation_skipper

于 2012-11-19T00:30:28.127 回答
0

派对有点晚了,但如果你想更新单个属性,你可以使用 update_attribute 方法跳过验证检查。在这种情况下,您可以致电

user.update_attribute :reputation, 200
于 2015-06-24T04:06:00.543 回答