rails常用驗證方法

validates_presence_of       :login,  :message => "用戶名不能爲空!"
validates_length_of           :login, :minimum => 4,   :message => "用戶名長度須爲4到20位字母或數字!"   validates_uniqueness_of   :login,:case_sensitive => false, :message => "該用戶名已存在!"
  
validates_presence_of     :password,  :message =>"密碼不能爲空!"   
validates_length_of         :password,   :minimum => 6,:message=>"密碼長度須爲6到20位字母或數字! "      
validates_presence_of     :password_confirmation,  :message =>"請再輸入一次密碼!"  
validates_confirmation_of :password,  :message => "兩次密碼不一致!"
  
 validates_format_of  :email, :message => "郵箱格式不正確!", :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i  

 

這裏用到了5個主要的驗證語法,下面分別介紹:

1、validates_presence_of —— 確認屬性值不爲nil也不爲空。

用法: validates_length_of attr..., [ 選項... ]

選項:

:message =>  缺省是 "is can't be blank."
:on =>:save, :create, 或 :update

 

2、validates_length_of   —— 確認屬性值的長度。遵循一些約束: 至少要給出一個長度(如最小長度:minimum,最大長度:maximum,或一個區間:in or :within,但是這三者只能選其一,長度不能負數),而不能只有單個:message選項,這個確認器允許爲不同的確認失敗分離消息,只要:message還可以使用。

用法: validates_length_of attr..., [ 選項... ]

例子:

validates_length_of :name, :maximum => 50   #這個時候可以自定義:message
validates_length_of :password, :in => 6..20  #這個時候採用默認的:message,忽略自定義內容
validates_length_of :address, :minimum => 10, :message => "seems too short"

 

選項:
:in (或 :within) =>值的長度必須在一個範圍內。
:is => integer, 值必須是整數的字符長度。
:minimum =>是一個integer, 值不能小於此整數。
:maximum=> 是一個integer ,值不能大於此整數。
:message =>是一個 text ,消息可以包含一個將被maximun,minimum,或確定長度代替的%d序列。
:on=> :save, :create, 或 :update
:too_long => 是一個text ,使用:maximum時的:message同義詞。
:too_short =>是一個 text,使用:minimum時的:message同義詞。
:wrong_length =>是一個 text,使用:is 時的:message同義詞。

 

 

3、validates_uniqueness_of —— 確認屬性是唯一的。對於每個屬性,確認數據庫內的其它行當前沒有與給定列同樣的值。
用法: validates_uniqueness_of  attr... [ 選項... ]

選項:
:message =>  缺省是 "has already been taken."
:on =>:save, :create, 或 :update

:scope => attr Limits the check to rows having the same value in the column as the row being checked.

 

4、validates_confirmation_of —— 確認字段和它的值有同樣內容。很多表單要求用戶輸入同一信息兩次(如確認密碼)如果你使用命名約定,即第二字段的名字附有_confirmation,你可以使用validates_confirmation_of ()來檢查兩個字段是否有同樣的值。

用法:validates_confirmation_of attr... [ 選項... ]

選項:
:message => 缺省是"doesn't match confirmation."
:on  =>:save, :create, 或 :update

 

5、validates_format_of ——  在一個模式上確認屬性。通過與正則表達式匹配它的值來確認每個字段。

用法:validates_format_of attr..., :with => regexp  [ 選項... ]

選項:
:message => 缺省是"is invalid."
:on  =>:save, :create, 或 :update

 

此外還有一些驗證如下:

 

6、validates_acceptance_of —— 確認checkbox是否被標記。許多表單有checkbox,用戶必須選擇以便接受一些條款或條件。這個確認簡單地檢驗這個box已經確認被標記,這個屬性值是個字符串。屬性本身並不被保存在數據庫內(如果你希望明確地記錄確認的話,沒有什麼東西會阻止你這樣做)。

用法: validates_acceptance_of attr... [ 選項... ]
例子:

validates_acceptance_of :terms, :message => "Please accept the terms to proceed"


選項:

:message => 缺省是"must be accepted."
:on  =>:save, :create, 或 :update

7、validates_associated —— 在關聯的對象上完成確認。在給定的屬性上完成確認,它被假設爲是"活動記錄模型"。對每個與屬性關聯的確認失敗的話,一個單獨的消息將被添加到那個屬性的錯誤列表中(也就是說,個別的細節原因而出現的失敗,將不會寫到"模型"的錯誤列表中)。小心不要包含一個validates_associated()調用在彼此引用的"模型"中:第一個將會試圖確認第二個,它依次將確認第一個等等,直接你堆棧溢出。

用法: validates_associated name... [ 選項... ]

例子:

class Order < ActiveRecord::Base
  has_many :line_items
  belongs_to :user
  validates_associated :line_items, :message => "are messed up"
  validates_associated :user
end


選項:

:message => 缺省是"is invalid."
:on  =>:save, :create, 或 :update

 

8、validates_each —— 使用一個塊來確認一或多個屬性。爲每個屬性調用塊(如果:allow_nil爲true,則跳過是nil的屬性)。傳遞屬性的名字,屬性的值到被確認的"模型"內。如下面例子顯示的,如果一個確認失敗,塊應該被添加給"模型"的錯誤列表

用法: validates_each attr... [ 選項... ] { |model, attr, value| ... }

例子:

class User < ActiveRecord::Base
  validates_each :name, :email do |model, attr, value|
    if value =~ /groucho|harpo|chico/i

      model.errors.add(attr, "You can't be serious, #{value}")
    end
  end
end

選項:

:allow_nil => boolean值, 如果 :allow_nil 爲 true,帶有值nil的屬性將不被傳遞給塊而是被跳過。

:on  =>:save, :create, 或 :update

 

9、validates_exclusion_of —— 確認屬性不在一組值中。確認屬性沒有出現在枚舉中(任何對象都支持include?()斷言)。
用法:validates_exclusion_of attr..., :in => enum [ 選項... ]

例子:

class User < ActiveRecord::Base
  validates_exclusion_of :genre,:in => %w{ polka twostep foxtrot },

                         :message => "no wild music allowed"
  validates_exclusion_of :age, :in => 13..19, :message => "cannot be a teenager"
end


選項:
:allow_nil => 如果屬性爲nil,並且:allow_nil選項爲true。則枚舉不被檢查。
:in (或 :within) => 一個可枚舉對象。
:message => 缺省是"is invalid."
:on  =>:save, :create, 或 :update

 

10、validates_inclusion_of —— 確認屬性是否屬於一個值集。確認每個屬性的值是否出現在枚舉中(任何對象都支持include?()斷言)。
用法:validates_inclusion_of attr..., :in => enum [ 選項... ]

例子:

class User < ActiveRecord::Base
  validates_inclusion_of :gender,:in => %w{ male female },

                         :message => "should be 'male' or 'female'"
  validates_inclusion_of :age,:in => 0..130, :message => "should be between 0 and 130"
end


選項:
:allow_nil => 如果屬性爲nil,並且:allow_nil選項爲true。則枚舉不被檢查。
:in (或 :within) => 一個可枚舉對象。
:message => 缺省是 "is not included in the list."
:on  =>:save, :create, 或 :update

 

 

11、validates_numericality_of —— 確認那個屬性是有效的數字。確認每個屬性是個有效數字。在:only_integer選項中,屬性必須由可選的符號後跟隨一個或多個數字。在選項中(或者如果選項不是true),可由Ruby Float()方法允許的任何浮點數都被接受。

用法:validates_numericality_of attr... [ 選項... ]
例子:

class User < ActiveRecord::Base
  validates_numericality_of :height_in_meters
  validates_numericality_of :age, :only_integer => true
end


選項:
:message => 缺省是 "is not a number."
:on=> :save, :create, 或 :update
:only_integer =>如果爲 true,則屬性必須是包含一個可選的符號後跟隨數字的字符串。

發佈了23 篇原創文章 · 獲贊 7 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章