我有一个简单的 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
谢谢,山姆