为什么update_attribute绕过模型验证?

时间:2014-04-26 23:28:17

标签: ruby-on-rails validation module

目前正在通过着名的教程。很难理解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 }

1 个答案:

答案 0 :(得分:1)

从Rails基础引用本身可知:

update_attribute更新单个属性并保存记录,而不通过正常的验证程序。这对现有记录的boolean flags特别有用。

请参阅http://apidock.com/rails/ActiveRecord/Base/update_attribute

如果你想知道它被绕过的原因,请查看以下SO答案:

Rails: update_attribute vs update_attributes

希望有所帮助:)