目前正在通过着名的教程。很难理解update_attribute方法绕过模型验证的原因。当我假设update_attributes受验证并且update_attribute不受影响时,我是否正确?
助手:
module SessionsHelper
def sign_in(user)
remember_token = User.new_remember_token
cookies.permanent[:remember_token] = remember_token
user.update_attribute(:remember_token, User.hash(remember_token))
self.current_user = user
end
end
验证
class User < ActiveRecord::Base
has_secure_password
before_create :create_remember_token
before_save { self.email = email.downcase }
validates :name, presence: true, length: { maximum: 50 }
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-]+(?:\.[a-z\d\-]+)*\.[a-z]+\z/i
validates :email, presence: true, format: { with: VALID_EMAIL_REGEX }, uniqueness: { case_sensitive: false }
validates :password, length: { minimum: 6 }
答案 0 :(得分:1)
从Rails基础引用本身可知:
update_attribute
更新单个属性并保存记录,而不通过正常的验证程序。这对现有记录的boolean flags
特别有用。
请参阅http://apidock.com/rails/ActiveRecord/Base/update_attribute。
如果你想知道它被绕过的原因,请查看以下SO答案:
Rails: update_attribute vs update_attributes
希望有所帮助:)