Rails 3:验证:presence => true vs validates_presence_of

Aar*_*man 28 ruby-on-rails-3

validates :presence和之间有什么区别validates_presence_of?通过ActiveModel它看起来他们以相同的方式设置验证.但是,给定以下模型定义:

class Account < ActiveRecord::Base
  has_one :owner_permission, :class_name => 'AccountPermission', :conditions => { :owner => true, :admin => true }
  has_one :owner, :class_name => 'User', :through => :owner_permission, :source => :user

  validate :owner, :presence => true
  validates_associated :owner
end
Run Code Online (Sandbox Code Playgroud)

在实例上调用save Account不会验证所有者的存在.但是,如果我使用validates_presence_of它会.

scr*_*agz 26

所有这些validates_whatever_of :attr宏都是通话validates :attr, :whatever => true.

问题是你正在使用validate而不是validates.

  • @Ans验证被认为是Rails 3.x的当前语法,validates_something_of属于Rails 2.x时代 (3认同)

ser*_*erg 23

在Rails 3.x和4.x中 - 现在鼓励使用以下语法:

validates :email, presence: true
validates :password, presence: true
Run Code Online (Sandbox Code Playgroud)

而不是2.x方式:

validates_presence_of :email
validates_presence_of :password
Run Code Online (Sandbox Code Playgroud)