0

我有一个简单的 CRUD 应用程序,其中包含对商品模型的一些基本验证。这些测试通过。好的,现在我需要测试它的名称是否没有空格或多个单词。我在控制台中测试了以下内容,它似乎可以正常工作,因此阅读了有关验证的 rails 指南,我在下面编写了一个自定义验证。不幸的是,运行我的测试,现在都失败了,因为它无法创建商品,因为我编写的自定义验证失败了。我已经尝试了许多不同的组合,将验证器从 Railscasts #211 开始,通过将其组合到 validates 调用中。这可能很简单,但如果我取消对验证器的调用,那么其他基本测试就会通过。错误是:验证失败:名称必须是一个单词(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

谢谢,山姆

4

1 回答 1

0

在这种情况下,当它遇到基本错误时,似乎这个“stomp”是由于早期的黄瓜抛出错误。感谢@jorendorff 指出,将我的 <= 1 替换为 != 1 使这个测试通过并且之前的测试也通过了。我不知道这是 ruby​​ 的反射还是导致之前通过的测试出错的原因,我说的是无知。我只知道黄瓜至少会抛出误导真正原因的错误。

于 2012-12-14T22:27:18.717 回答