2011-02-02 49 views
0

這是一個痛苦的noob問題,但我不得不問。我想驗證如果一個特定的字段,我們稱之爲:token不是一個特定的字符串。所以,我把我的自定義驗證:自定義驗證不觸發b/c我的紅寶石是不正確的

validate :use_beta_token

然後我定義我的驗證方法

def use_beta_token 
     errors.add(:token, "Incorrect beta token") if token not 'pizza' 
end 

每當我設置令牌爲一個字符串,不是「比薩餅」,和我考與valid?它回來了true。我在這裏搞什麼?我也試過if token !== 'pizza',但那也行不通。我確信答案是顯而易見的,但我似乎無法挖掘它。使用自定義的驗證爲Rails 3

回答

3

嘗試

errors.add(:token, "Incorrect beta token") unless token == 'pizza' 

的方法不一樣的作品!,這是一個一元布爾運算符,而不是二進制比較操作。

至於如何寫它們,保持簡潔。示例請參閱rails guide

+0

就是這樣。謝謝! – bjork24 2011-02-02 23:34:29

0

的一種方法是定義加載ActiveModel從::驗證繼承自己的驗證類,然後實現validate方法和安裝錯誤,像這樣:

# define my validator 
class MyValidator < ActiveModel::Validator 
    # implement the method where the validation logic must reside 
    def validate(record) 
    # do my validations on the record and add errors if necessary 
    record.errors[:token] << "Incorrect beta token" unless token == 'pizza' 
    end 
end 

一旦你定義的驗證,那麼您必須將其包含到您的模型中,以便可以使用它並將其應用於validates_with方法。

class ModelName 
    # include my validator and validate the record 
    include ActiveModel::Validations 
    validates_with MyValidator 
end