Rails 3自定义验证器'stomps'现有验证

时间:2012-12-13 15:59:24

标签: validation ruby-on-rails-3.2

我有一个简单的CRUD应用程序,其中包含商品模型的一些基本验证。通过测试。好的,现在我需要测试没有空格,或者名字不止一个单词。我在控制台中对下面进行了测试,它看起来很有效,所以在轨道上阅读有关验证的指南我在下面写了一个自定义验证。不幸的是,运行我的测试,现在都失败了,因为它无法创建商品,因为它由于我写的自定义验证而失败。我尝试了许多不同的组合,将Railscasts#211开始的验证器合并到验证调用中。这可能是一些简单的事情,但是如果我把调用器拉出来,那么其他的基本测试就会通过。错误是:验证失败:名称必须是单个单词(ActiveRecord :: RecordInvalid)

 require_relative 'commodity_name_validator'
 class Commodity < ActiveRecord::Base
   attr_accessible :description, :name
   has_many :prices
   before_save { |commodity| commodity.name.capitalize! }
   validates :name, presence: true, length: { minimum: 4 }
   validate :commodity_name_validations
 end

 class CommodityNameValidator < ActiveModel::Validator
   def validate(record)
     if record.name.split(" ").length <= 1
       record.errors[:base] << "Name must be a single word"
     end
   end
 end
thnx,sam

1 个答案:

答案 0 :(得分:0)

看来这个'stomp'是由于黄瓜在这种情况下遇到基本错误时更早出现错误。感谢@jorendorff指出将我的&lt; = 1替换为!= 1使得此测试通过,并且之前也通过了。我不知道这是不是红宝石的反射,也不知道是什么造成了之前通过测试的错误,我说的是出于无知。我只知道黄瓜,至少会抛出误导真正原因的错误。

相关问题