这是一个痛苦的菜鸟问题,但我不得不问。我希望验证在特定字段中跳转,我们称之为:token
不是特定字符串。所以,我打电话给我的自定义验证:
validate :use_beta_token
然后我定义了我的验证方法
def use_beta_token
errors.add(:token, "Incorrect beta token") if token not 'pizza'
end
每当我将令牌设置为不是“披萨”的字符串时,我使用valid?
进行测试,它将返回true
。我在这里搞砸了什么?我也试过了if token !== 'pizza'
,但那也不行。我确定答案很明显,但我似乎无法将其挖掘出来。
答案 0 :(得分:3)
试
errors.add(:token, "Incorrect beta token") unless token == 'pizza'
not方法就像!,它是一个一元布尔运算符而不是二元比较运算符。
关于如何编写它们,保持简洁。有关示例,请参阅rails guide。
答案 1 :(得分:0)
为Rails 3使用自定义验证器的一种方法是定义自己的Validator类,该类继承自ActiveModel :: Validator,然后实现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