ActiveModel::匿名类的验证

2023-12-26

我正在开发一个类似 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(使用前将#替换为@)

ActiveModel::匿名类的验证 的相关文章

  • 设计重定向到成功登录似乎在第一次登录尝试时卡住

    我正在使用 Ruby on Rails 开发一个小型应用程序 并使用 Devise 进行身份验证 我有两个登录系统设置 一个是user另一个是employee 当使用正确的电子邮件和密码登录时 设计会发送正确的重定向到返回路径 但它会卡在那
  • 载波无法删除图像

    我现在使用 Carrierwave 上传图像 一切都很好 除了一个 当我添加用于删除上传图像的复选框时 我收到错误 无法批量分配受保护的属性 remove image Form Model class Manufacturer lt Act
  • 未签出...捆绑安装无法修复帮助!

    https github com intridea omniauth git at master is not checked out Please run bundle install Bundler GitError 那我该怎么办 捆绑
  • 如何将可求和指标压缩为 ruby​​ 表中的唯一标识符

    我正在尝试将可求和指标压缩为 ruby 表中的唯一标识符 我有下表 id1 123 id2 234 id1 345 压缩指标最有效的方法是什么 使其看起来像这样 id1 468 id2 234 我认为其他回答者想太多了 您只需一次操作即可完
  • 开始使用 Ruby、Watir 和 Ruby Mine?

    我想对电子商务网站进行自动化测试 我安装了 Ruby Watir Gems 和 Ruby Mine 虽然我尝试过 RubyMine 但我不知道如何开始编写一个简单的脚本 如何开始使用 RubyMine 编写简单的脚本 我创建了一个项目 你下
  • Rails validates_与模型的错误消息相关

    我在模型中使用 validates linked 来使用其他模型的验证代码 问题是验证失败的消息是 is invalid 我想将模型验证失败的实际描述错误冒泡到顶部 我发现这个问题 验证与模型的错误消息关联 https stackoverf
  • 为什么安装 Ruby 1.9.3 时会出现 404 错误?

    我最近擦除了我的计算机 操作系统 Mac OS X 10 6 8 并重新安装了所有开发工具 我再次安装了RVM 但是 它不允许我安装 Ruby 1 9 3 到目前为止我已经尝试过 rvm install 1 9 3 rvm install
  • 如何在Windows 7上运行Ruby程序?

    有谁知道如何在 Windows 7 上运行 编译 Ruby 程序 例如 你可以在 Eclipse 中编译 Java 但我似乎找不到 Ruby 的编译器 http rubyinstaller org http rubyinstaller or
  • 为什么对参数哈希进行切片会在批量分配时带来安全问题?

    通过批量分配来预防安全风险的官方方法是使用属性可访问 http api rubyonrails org classes ActiveModel MassAssignmentSecurity ClassMethods html 然而 一些程序
  • 检查 Float 是否等于 Ruby 中的整数值

    假设我有以下代码 x 0 8 y 1 0 最好的检查方法是什么y相当于Integer 目前我正在做 y to int y 这可行 但我觉得应该有更好的方法 You mod值为 1 并检查该值是否等于 0 if y 1 0
  • ruby 包含问题

    class Foo def initialize a puts Hello a end end module Bar def initialize b puts b World end end class Sample lt Foo inc
  • 如何在 Rails 3 项目中包含 SSL 证书

    我开发了一个 Rails 3 项目 它使用thin作为服务器 与 Devise 和 Doorkeeper 一起进行身份验证 我想在我的项目中添加 SSL 证书 我看过一些描述如何在 Rails 3 项目中使用 SSL 证书的帖子 但没有一个
  • Ruby/Rails - 访问“查找”表而不对其进行建模?

    这是针对 Ruby on Rails 3 0 x 项目的 我有一个 查找 表 其中包含来自供应商的数据 当我从其他来源导入数据时 我想检查此表 加入 SKU 以获取额外数据 在我的应用程序中为该表创建模型对我来说似乎不合适 我的应用程序永远
  • 即使使用 rvm pkg install zlib 后也无法加载此类文件 -- zlib

    我使用 rvm 安装了 zlib 包和 ruby 1 9 3 但是每当我尝试安装时 它说宝石cannot load such file zlib 我用来安装的命令是 rvm install 1 9 3 rvm pkg install zli
  • ActiveRecord 嵌套 SELECT——我可以在没有手动 SQL 的情况下完成它吗?

    我有一张桌子 上面有 除其他外 一个名字和一个等级 我想返回所有唯一名称的集合 但对于返回的每个名称 我想选择排名最高的行 这很简单 有两个嵌套的 SELECT 语句 SELECT FROM SELECT FROM foo ORDER BY
  • “gem install Rails”因 DNS 错误而失败

    rvm use Using home owner rvm gems ruby 2 1 2 gem install rails ERROR While executing gem Gem RemoteFetcher FetchError Er
  • 如何制作可选的强参数键但过滤嵌套参数?

    我的控制器中有这个 params require item permit 让我们假设这个 rspec 规范 它按预期工作 put update id item id item name new name 然而 以下原因ActionContr
  • 将 gmaps4rails 与 https/SSL 结合使用

    我是 gmaps4rails 的忠实粉丝 它使向我们的网络应用程序添加地图变得非常容易 我现在遇到的唯一问题是 如果您在 https 页面上使用它 则会收到有关混合内容的安全警告 谷歌地图API确实支持https 所以我认为这只是将脚本引用
  • Rails:如何重新启动 sidekiq?

    我正在使用 sidekiq gem 在后台运行 API 调用 我在守护进程中运行 sidekiq 如下所示 bundle exec sidekiq d 现在我对我的方法做了一些更改 所以我想重新启动 sidekiq 我尝试使用以下命令杀死
  • 处理不兼容的字符编码:UTF-8 和 ASCII-8BIT

    我在生产中遇到不兼容的字符编码错误 我尝试在本地重现它 但没有成功 这是错误消息 A ActionView Template Error occurred in controller name action name incompatibl

随机推荐

  • 我应该尝试在 Java 中创建可逆枚举还是有更好的方法?

    我似乎已经多次遇到这个问题 我想问问社区我是否只是找错了树 基本上我的问题可以归结为 如果我有一个枚举 在Java中 其值很重要 我应该使用枚举还是有更好的方法 如果我确实使用枚举那么什么是反向查找的最佳方法吗 这是一个例子 假设我想创建一
  • Neo4j 中所有节点/关系的可靠(自动)递增标识符

    我正在寻找一种方法 基于递增计数器 不是大而长的 uuid 为 Neo4j 中的所有节点 关系生成唯一标识符 众所周知 Neo4j 引擎维护的内部 ID 不如外部引用可靠 一个接近的解决方案是这个问题中提出的代码 https stackov
  • 在 React JSX 中选择性地渲染可选组件属性

    我有一个用例 其中有一个图像组件 该组件具有必需的 src 属性和可选的 link 属性 如下所示 var Image React createClass propTypes link React PropTypes string even
  • Firebase snapshot.key 未返回实际密钥?

    我有一个根据用户 ID 搜索用户的查询 usersRef queryOrderedByChild email queryEqualToValue email observeEventType Value withBlock snapshot
  • 是否可以将 will_paginate 与 GROUP BY 一起使用?

    我有一个巨大的数据库 我想通过使用 will paginate 来减少查询响应时间 我试图按列对条目进行分组 然后使用 will paginate 将结果放入不同的页面 我尝试这样做 list Persons find by sql sel
  • 如何在Python中将异构列表扁平化为单个列表? [复制]

    这个问题在这里已经有答案了 我有一个对象列表 其中对象可以是列表或标量 我想要一个只有标量的扁平列表 例如 L 35 53 525 6743 64 63 743 754 757 outputList 35 53 525 6743 64 63
  • Perl 正则表达式限制的解决方法?

    我编写了一个程序来从邮件文件夹中提取附件 GITHUB https github com barrycarter bcapps blob master bc extract attachments pl 但由于 Perl 对正则表达式匹配的
  • Angular 2 AOT 构建错误 - JavaScript 堆内存不足

    我的 Angular 2 应用程序是由angular2 webpack 启动器 https www npmjs com package angular2 webpack starter 当我运行命令时npm run build aot构建A
  • pandas 上的数据框划分系列

    我需要划分矩阵的每一列df1进入矩阵的单列df2 得到一个有维数的矩阵df1 3 2 我需要一个结果 dataframe 1 6 2 7 3 8 3 6 4 7 5 8 df1 pd DataFrame data 1 2 3 3 4 5 i
  • 在批处理文件中逐行读取txt

    这是我的问题 我有一个 txt 文件 其中包含 100 个不同的视频名称 示例 abc mpg def mpg ghi mpg xyz mpg 我想使用一些命令逐一处理这些视频 并将结果放入同名的文件夹中 不带扩展名 command1 ab
  • 收集硬币并添加到 Sprite Kit 中的分数标签

    我正在尝试使用本教程作为参考 在我的游戏中实现一个简单的评分系统 http www raywenderlich com 87232 make game like mega jump sprite kit swift part 2 http
  • TagLib Sharp 不编辑艺术家

    我正在尝试将新的艺术家和标题 id3 标签保存到曲目中 从曲目加载标签工作正常 编辑曲目标题也工作正常 但是当我尝试编辑时演员 artist 它没有改变任何东西 这是代码 public void renameID3 string artis
  • 由于弃用而替换 self->isa

    我刚刚安装了 Xcode 4 6 现在我管理的古老代码中出现了新错误 编译器抱怨 直接访问 Objective C 的 isa 已被弃用 取而代之的是 object setClass 和 object getClass 并且该项目将无法构建
  • 如果 Vue 3 引用是对象的属性,则它们的行为会有所不同

    使用 Vue 3 的 Composition API 时 我注意到模板内部的引用在作为对象的属性进行访问时的行为有所不同 我认为这是最好的总结SFC Playground 中的这个示例 https sfc vuejs org eyJBcHA
  • F# 结构元组与 BCL 元组类型

    在 F 中你可以定义一个first函数如下 let first x y x 你可以这样称呼它 first 1 2 您还可以根据 BCL 定义相同的函数Tuple type let first t Tuple lt gt t Item1 但是
  • 如何使用 Github Actions 和语义发布 Github 插件发布整个目录?

    我想使用语义发布在 Github 版本上发布整个目录 构建目录 但不幸的是它将每个构建文件作为单个资产发布 对于复制 我正在使用 Vue CLI 生成项目vue create foo 安装语义释放作为开发依赖项npm install sav
  • 使用 VSTS 发布定义的蓝/绿部署

    我还没有看到任何有关如何在 VSTS 发布定义上进行蓝 绿部署的信息 我有一个 VSTS 发布定义 当我们的源代码中完成新的签入时 它会自动将新的更改部署到我们的 Prod 环境中 现在 该项目正在使用 Azure 流量管理器 并且添加了位
  • 枚举反向查找[重复]

    这个问题在这里已经有答案了 假设我有一个枚举 enum Color Red 1 Green Blue 如果我有一个号码 我可以通过这样做来获取枚举键 var colorName string Color 2 colorName Green
  • Python中使用os.walk()递归遍历目录

    我想从根目录导航到其中的所有其他目录并打印相同的内容 这是我的代码 usr bin python import os import fnmatch for root dir files in os walk print root print
  • ActiveModel::匿名类的验证

    我正在开发一个类似 DataMapper 的小型 ODM 项目 并且我正在尝试利用ActiveModel Validations成分 然而 我在编写测试时遇到了问题 我使用匿名类来构建我的测试模式 但是当涉及到运行验证器时 ActiveMo