Rails教程 - 必须关闭验证用户

时间:2012-04-28 11:05:33

标签: ruby-on-rails ruby ruby-on-rails-3 railstutorial.org

我已经按照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.

5 个答案:

答案 0 :(得分:3)

你可以打电话

@user.save(:validate => false)

答案 1 :(得分:0)

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

答案 2 :(得分:0)

如果您想控制哪些属性可以跳过验证,您可能想尝试使用ValidationSkipper gem:

https://github.com/npearson72/validation_skipper

答案 3 :(得分:0)

为什么不为它创建不同的模型,一个安全的日志记录模型和密码更改,以及其他任何内容的配置文件模型,给出声誉,奖章和内容。

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

def reputation value
    self.profile.reputation = value
    self.profile.save
end

答案 4 :(得分:0)

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

user.update_attribute :reputation, 200