我正在使用一个像DataMapper这样的ODM项目,我正在尝试使用ActiveModel :: Validations组件.但是,我在编写测试时遇到了一个问题 – 我正在使用匿名类来构建我的测试模式,但是在运行验证器时,ActiveModel :: Name类会抛出错误:
类名不能为空.在给出匿名类时,需要提供一个名称参数
类名不能为空.在给出匿名类时,需要提供一个名称参数
以下是一个简单的代码示例:
require 'active_model' book_class = Class.new do include ActiveModel::Validations validates_presence_of :title def title; ""; end #This will fail validation end book_class.new.valid? # => throws error
只有在出现失败的验证器时才引发异常 – 我猜测当尝试构造验证错误消息时会出现问题.所以我的问题是:
解决方法
ActiveModel尝试在设置错误消息时获取模型名称(如您所见).绕过它的最快捷方式(不给给你的匿名类一个名字)是给你的类一个类方法model_name,返回一个ActiveModel :: Name的实例.
例如
require 'active_model' book_class = Class.new do include ActiveModel::Validations def self.model_name ActiveModel::Name.new(self,nil,"temp") end validates_presence_of :title def title; ""; end # This will fail validation end book_class.new.valid? # => no error