gpt4 book ai didi

ruby - ActiveModel::匿名类的验证

转载 作者:数据小太阳 更新时间:2023-10-29 06:38:52 26 4
gpt4 key购买 nike

我正在做一个类似 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 来说是不可能的,还是有我不知道的解决方法?

最佳答案

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

关于ruby - ActiveModel::匿名类的验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14431723/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com