Mongoid 3 - 检查复合键的唯一性

2024-05-04

我切换到 Mongoid 3,这使得一些事情有所不同:)目前我尝试检查复合字段是否唯一:

class Host
  include Mongoid::Document

  field :ip, :type => String
  field :port, :type => Integer
  field :username, :type => String
  field :password, :type => String

  validates_presence_of :ip
  validates_presence_of :port
end

如何获取其中的 validates_uniqueness_of 来检查 ip 和 port 是否作为复合字段唯一? AFAIK Mongoid 2 中有一种方法可以基于多个字段创建新的 _id ,但似乎在 Mongoid 3 中已删除:

  key :ip, :port

复合键支持在 3 中被删除,因为您现在可以轻松覆盖默认 _id 字段并使用 lambda 设置默认值。尝试类似的方法:

class Host
  include Mongoid::Document
  field :_id, type: String, default: -> { ip + ":" + port }
  ...
end

然后您可以验证此 _id 字段的唯一性。

见蒙古人docs http://mongoid.org/en/mongoid/docs/documents.html了解更多信息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mongoid 3 - 检查复合键的唯一性 的相关文章

随机推荐

  • keep-order 设置 true 不会按照定义的组依赖关系的顺序运行 TestNG 测试

    我正在尝试运行分组 TestNG 测试 给定的 xml 是 testng xml 中的测试
  • ExtJs 4,从容器中删除控件并将其从内存中删除的正确方法是什么?

    这个问题很简单 但我找不到一个好的 明确的答案 正确的方法是什么 从容器中删除控件 在 ExtJs 4 中将其从内存中删除 Ext AbstractContainer remove http dev sencha com deploy ex
  • git merge,保留两者

    为了合并 我用它来 保留我的 git merge X ours foo 这是 保留他们的 git merge X theirs foo 然而 在我最近的合并中 看起来最好保留双方 Git 是否有一个 策略 来避免手动编辑文件 没有解决这些冲
  • jQuery 添加和删除类

    我有这个选择器
  • 双击选项卡控制标题

    一段时间以来我一直想知道这个问题 双击 winforms TabControl 的标题没有被检测到 但我想处理这个事件 看起来所有鼠标事件 单击 移动等 在 TabControl 的 非活动 区域上时都不会引发 我什至尝试过对 TabCon
  • 从文本文件中读取丹麦语字符

    我正在尝试读取包含一些丹麦语字符的文本文件 我找到了几种使用不同类型的编码来完成此操作的方法 但我看到的示例仅读取一个文件 这是我到目前为止所拥有的 search directory for all txt files foreach st
  • 如何更改 max_allowed_pa​​cket 大小

    我的 MySQL 数据库中的 BLOB 字段出现问题 上传大于约 1MB 的文件时出现错误Packets larger than max allowed packet are not allowed 这是我尝试过的 在 MySQL 查询浏览
  • 永远不应该触发嵌套优化。这可能是由于 NSISVariable 委托回调内部发生自动布局工作

    应用程序崩溃了 日志给了我这条消息 永远不应该触发嵌套优化 这可能是由于自动布局工作发生在 NSISVariable 委托回调内 这是不允许的 如何解决这个问题 认为我正在后台线程中更新 UI 尝试放置 if NSThread isMain
  • 带有自定义按钮的 ExtJs 消息框

    如何使用自定义按钮显示 ExtJS 消息框 我想要一个带有自定义消息以及 取消 和 停用 按钮的消息框 请给一些想法 buttons text Cancel handler function Ext MessageBox hide subm
  • 创建应用程序:无法初始化 ORM

    当我启动节点时 我总是收到此错误 请回复我我哪里出错了 错误 创建应用程序 无法初始化 ORM initializeORM NewORM 无法初始化 DB 无法打开 application name Chainlink 0 10 7 7C
  • 比较 Swift 中的 AnyObjects,无需将它们转换为特定类型

    尝试使用 Equatable 协议中定义的 运算符来比较 AnyObject 类型的两个对象会导致 Swift 中出现编译错误 有没有人找到一种方法来比较这些对象 而不知道可用于向下转换的对象的真实类型 这个问题的背景是我有一个字典 Dic
  • Cordova 插件不适用于 Ionic

    我正在 Angular 中构建一个 Ionic 应用程序 但一直无法让插件工作 例如 我尝试使用状态栏插件 如下所述 http ionicframework com tutorials fullscreen apps http ionicf
  • Excel - 使用 FILTERXML 从字符串中提取子字符串

    Background 最近 我一直在尝试更熟悉将分隔字符串更改为 XML 以使用 Excel 进行解析的概念FILTERXML https support microsoft com en us office filterxml funct
  • 节点获取映射错误 - 无法读取未定义的属性“映射””

    当我尝试运行 地图 部分时出现错误无法读取未定义的属性 地图 The customersconst 已在上面声明 所以不确定 未定义是从哪里来的 地图需要声明吗 const AWS require aws sdk ses new AWS S
  • Google App Engine 不解析 JSF 2.0 标签

    我在 AppEngine 上运行 JSF 2 0 时遇到问题 我有以下index xhtml如果我部署它并打开页面 除了Title并且该页面的源代码与编写时完全相同 没有任何更改
  • STL 映射值构造函数

    我有一个类 X 我想将其放入 std map 类型的 STL 映射中 STL 映射需要将 X 存储在内存中的某个位置 因此我正在寻找一种有效的 运行时和内存 方法来创建 X 并将其存储在映射中 我注意到以下代码 其中 x 是 X 类型的对象
  • isinstance 如何用于 List?

    我试图了解 Python 的类型注释是如何工作的 例如List and Dict not list or dict 具体来说 我感兴趣的是如何isinstance list List 有效 这样我就可以创建自己的自定义注释 我看到List定
  • php 时间戳 UTC

    我有一个 PHP MySQL 查询 它将一些数据插入 MySQL 数据库 并且包含时间戳 目前INSERT查询用途NOW 对于时间戳列 它以以下格式保存在数据库中 2012 07 24 13 13 02 不幸的是 对我来说 服务器不在我的时
  • 如何将主页包含在 Sphinx 目录中?

    假设我有一个 Sphinx 项目 其来源如下 index rst installation rst templating index rst module rst fieldtype rst index rst 主页 具有以下目录树 toc
  • Mongoid 3 - 检查复合键的唯一性

    我切换到 Mongoid 3 这使得一些事情有所不同 目前我尝试检查复合字段是否唯一 class Host include Mongoid Document field ip type gt String field port type g