2015-06-23 81 views
0

你好,這是我的用戶模型驗證Rails的

class User < ActiveRecord::Base 

has_many :events 

validates :cellphone, numericality:{ only_integer: true, message:"no es un numero"}, format: { with: /\d{11}/, message: "mal formato, deben ser 11 digitos, incluyendo codigo de area" }, :allow_blank => true 
validates :phone, numericality:{ only_integer: true, message:"no es un numero"}, format: { with: /\d{11}/, message: "mal formato, deben ser 11 digitos, incluyendo codigo de area" }, :allow_blank => true 
validates_numericality_of :cellphone, :on => :create, :message => "no es un numero", :allow_blank => true 
validates_numericality_of :document, :on => :create, :message => "no es un numero", :allow_blank => true 
validates :name, :presence => true 
validates :lastname, :presence => true 
validates :document, :presence => true, :uniqueness => true 
validates :cellphone, :presence => true, :uniqueness => true 
validates :phone, :presence => true, :uniqueness => true 


validates_format_of :email,:with => Devise::email_regexp, :allow_blank => true 

devise :database_authenticatable, :registerable, 
    :recoverable, :rememberable, :trackable, :validatable 
end 

我想valida,例如:手機,numericality只有當它傳遞:手機,:存在=>真正的驗證。

我已經閱讀StackOverflow中的所有帖子,但我似乎無法理解他們在做什麼。

如果some1可以幫助我一步一步來。

由於

+1

您允許空白和您驗證存在和唯一性。這是矛盾的 – apneadiving

回答

0
:allow_blank => true 
:presence => true 

如在評論中提及@apneadiving,這兩個是180度彼此間隔開。如果一個是真的,另一個應該是假的。你不能同時擁有兩者。

你在問什麼是你想檢查numericality當且僅當記錄存在。對於這一點,你可以做到以下幾點:

validates :cellphone, numericality:{ ... }, format: { ... }, :allow_blank => true 

這樣,因爲cellphone字段可以是空白,numericality將只檢查它,如果它的存在。

另一種選擇是:您可以傳遞一個塊來檢查該字段是否存在,並且它會檢查numericality

方法如下:

validate :cellphone, numbericality: { ... }, :if => lambda{ |object| object.cellphone.present? } 
+0

不,我要求的是什麼是優先級或驗證,如果存在是真實驗證數字性,然後如果數量通過然後驗證格式,但我的項目驗證所有並顯示兩者的錯誤消息 –

+0

您可以編寫一個正則表達式可以同時檢查數字和格式。這就是我所做的。爲什麼你只*想檢查格式,如果數值是真實的?讓格式處理這兩種情況。 –

+0

我想檢查他們兩個,但爲什麼要顯示這兩個錯誤消息......它殺了我,它顯示「手機不是一個數字」「手機壞格式」它顯示驗證格式,如果它通過然後檢查其數字。 –