加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – ActiveModel ::匿名类的验证

发布时间:2020-12-16 22:18:30 所属栏目:百科 来源:网络整理
导读:我正在使用一个像DataMapper这样的ODM项目,我正在尝试使用ActiveModel :: Validations组件.但是,我在编写测试时遇到了一个问题 – 我正在使用匿名类来构建我的测试模式,但是在运行验证器时,ActiveModel :: Name类会抛出错误: 类名不能为空.在给出匿名类时,
我正在使用一个像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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读