我正在开发一个类似 DataMapper 的小型 ODM 项目,并且我正在尝试利用ActiveModel::Validations
成分。然而,我在编写测试时遇到了问题 - 我使用匿名类来构建我的测试模式,但是当涉及到运行验证器时,ActiveModel::Name
类抛出错误:Class name cannot be blank. You need to supply a name argument when anonymous class given
这是一个可以重现的简单代码示例:
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 根本不可能做到这一点,还是有我不知道的解决方法?
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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)