我已经按照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.
答案 0 :(得分:3)
你可以打电话
@user.save(:validate => false)
答案 1 :(得分:0)
您可以尝试在创建时进行验证。这将使密码(或其他变量)只在注册时需要,但在编辑现有用户时则不需要。
答案 2 :(得分:0)
如果您想控制哪些属性可以跳过验证,您可能想尝试使用ValidationSkipper gem:
答案 3 :(得分:0)
为什么不为它创建不同的模型,一个安全的日志记录模型和密码更改,以及其他任何内容的配置文件模型,给出声誉,奖章和内容。
在第一个模型中创建新功能可以让你完全忘记第二个模型,比如
def reputation value
self.profile.reputation = value
self.profile.save
end
答案 4 :(得分:0)
派对有点晚,但如果要更新单个属性,可以使用update_attribute方法跳过验证检查。在这种情况下,您可以致电
user.update_attribute :reputation, 200