2012-12-13 103 views
0

我有一个简单的CRUD应用程序,其中包含商品模型的一些基本验证。那些通过的测试。好的,现在我需要测试一下没有空格,或者多于一个单词的名字。我在控制台中测试了下面的内容,它似乎可以正常工作,因此在导轨上阅读了我在下面编写了自定义验证的验证。不幸的是,运行我的测试,现在都失败了,因为它无法创建商品,因为它由于我写的自定义验证而失败。我已经尝试了许多不同的组合方式,将验证器从Railscasts#211开始,并将其组合到validates调用中。这可能是一件简单的事情,但如果我拔出对验证器的调用,那么其他基本测试就会通过。错误是:验证失败:产品名称必须是单个字(的ActiveRecord :: RecordInvalid)Rails 3自定义验证器'stomps'现有验证

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

回答

0

看来这“蹬”是因为黄瓜引发错误年初的时候遇到一个在这种情况下的基本错误。感谢@jorendorff指出,将我的< = 1更换为!= 1使得此测试通过,以及之前的通过也一样。我不知道这是ruby的反射还是导致之前通过测试的错误,我是在无知之中说出来的。我只知道黄瓜至少会抛出误导到真正原因的错误。