2013-02-05 87 views
0

我試圖對模型應用格式驗證,但是當我創建模型時,它不會回到無效狀態。我添加了一個長度驗證,它工作得很好。我究竟做錯了什麼?ActiveRecord格式驗證沒有觸發

require 'rubygems' 
require 'active_record' 

class User < ActiveRecord::Base 
    validates :username, :format => { :with => /[A-Za-z]+/, :message => "Only letters a-z are allowed" } 
    validates :username, :length => { :maximum => 20, :too_long => "%{count} letters is too many"} 
end 

ActiveRecord::Base.establish_connection(...) 


user = User.create!(:username => 'johnsmith1234', :signupdate => '2010-11-12') 
puts user.valid? 

輸出始終是真實的,除非我有超過20個字符的長度,然後我在長度得到一個錯誤。那麼爲什麼格式驗證不起作用呢?

回答

2

/[A-Za-z]/檢查給定字符串中的一個或多個字母。如果你只需要字母,你需要指定^$。 (即)/^[A-Za-Z]$/

validates :username, :format => { :with => /^[A-Za-z]+$/, :message => "Only letters a-z are allowed" } 

一件事用new來創建新的用戶。因爲如果驗證失敗,createcreate!會拋出錯誤。

user = User.new(:name => "john123") 
if user.valid? 
    #do something 
else 
    #do something   `user.errors.full_messages` will have your validation messages if it has error 
end 
+0

謝謝,開始/結束在表達式中工作。創造不會拋出和錯誤,只有創造!將。 – ILovePaperTowels