2013-01-13 43 views
0

我有一個用戶模式不同類型的驗證軌

class User < ActiveRecord::Base 
    validates :name, :presence => true 
end 

class User < ActiveRecord::Base 
    def validate 
    errors.add_to_base "name should not be nil" if name.nil? 
    end 
end 

回答

1

validates宏是更加靈活,因爲它也可以讓你做這樣的事情:

validates :name, :format => { :with => /\A[a-zA-Z]+\z/, 
:message => "Only letters allowed" }, :length => { :in => 6..20 } 

validate方法確實是一個快速簡便的方法來進行自定義驗證時,不存在現有的。 (當自定義驗證過於複雜時,通常應將它們移動到自定義驗證器中並使用宏)。

查看更多http://guides.rubyonrails.org/active_record_validations_callbacks.html

0

之間的差別是 - 第一個將無法保存一個空字符串,而第二個將允許它。

+0

當然,但假設兩者都檢查爲零?,其他所有相同? – nik7

+0

我的意思是我們需要顯式調用user.valid嗎?在第二種情況下?或者他們將像往常一樣被驗證? – nik7

+1

'valid?'調用'validate'以及驗證方法。 (IIRC,'驗證'宏的所有鏈驗證進入'validate'方法' –