2011-02-02 21 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