基于嵌入属性验证 Mongoid 中的嵌入文档

2024-05-03

我有一个订阅者类,它有 embeds_many 订阅。订阅具有属性状态。我想添加对状态的验证,以便每个订阅者只有一个订阅可以具有“活动”状态。订户可以拥有多个状态为“已购买”或“已过期”的订阅。


这应该可以做到:

class Subscriber
  include Mongoid::Document
  embeds_many :subscriptions
  validate :active_subscriptions

  def active_subscriptions
    self.errors.add(:base, 'too many active subscriptions') if 
        subscriptions.where(status: 'active').count > 1
  end
end

class Subscription
  include Mongoid::Document
  embedded_in :subscriber
  field :status, class: 'String'
end

s = Subscriber.create
s.subscriptions.build(status: 'active')
s.save # fires validations on subscriber
s.subscriptions.build(status: 'active')
s.save # wouldn't save

但请确保您始终在订阅者上调用保存,否则验证不会在订阅者上触发,并且您将处于不一致的状态。在不一致的状态下,您稍后可能会看到验证失败

s = Subscriber.create
s.subscriptions.create(status: 'active') # fires validations on subscription only
s.subscriptions.build(status: 'active').save # fires validations on subscription only

如果您还需要验证订阅,则在保存订阅者时,可以级联回调:

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

基于嵌入属性验证 Mongoid 中的嵌入文档 的相关文章

随机推荐

  • 将 Matlab MEX 文件中的函数直接嵌入到 Python 中

    我正在使用专有的 Matlab MEX 文件在 Matlab 中导入一些仿真结果 当然没有可用的源代码 Matlab 的接口实际上非常简单 因为只有一个函数 返回一个 Matlab 结构体 我想知道是否有任何方法可以直接从Python调用M
  • 常见的 Web UI 样式

    在接下来的几天里 我必须向我的一位客户展示一个 Web 应用程序的原型 问题是我不太擅长 CSS 最糟糕的是我几乎对得到的结果不满意 编写业务逻辑对我来说没有任何挑战 但 UI 设计却占用了我 80 以上的时间 我不需要什么令人惊叹的东西
  • /etc/php5/conf.d 文件夹中的 .ini 文件有什么用?

    我知道 ini 文件位于 etc php5 cli与 PHP 的 CLI 使用有关 文件位于 etc php5 fpm是关于 PHP 的 FastCGI FPM 方面 但是位于以下位置的 ini 文件又如何呢 etc php5 conf d
  • 用户登录时如何更新updated_at列?

    我正在尝试更新updated at每次用户登录时 列到当前时间 但我收到以下错误 InvalidArgumentException 找不到四位数年份 数据丢失 PHP input Input all remember Input has r
  • 对 JFace Treeviewer 多列进行排序

    我希望用户能够对TreeViewer只要他想 只要单击列标题即可 但是我不知道正确的方法 我发现我们可以使用ViewerComparator对不同的元素进行排序 但是 我不知道如何设置侦听器以便能够正确进行升序或降序排序 有没有办法让 JF
  • 条件中的 T-SQL USE 语句

    看来USE语句是由MS SQL Server 2008R2编译的 例如 if 1 0 begin USE MyDB end 结果将在执行中USE MyDB同时忽略 IF 语句 如何改变它以适应条件 附 也尝试过execute sp exec
  • 寻找 jQuery 效果来逐渐显示隐藏的 DIV/图像

    可能我错过了一些明显的东西 但我无法弄清楚如何慢慢地显示隐藏的图像 DIV 以便它从上到下显示 如果你看一下这个 jsfiddle 你会看到我试图在 jQuery 中使用 show 来显示的图像 http jsfiddle net nick
  • 委托:方法名称预期错误

    我正在尝试让以下简单的委托示例正常工作 根据我从中取出的一本书 应该没问题 但我得到了Method name expected error namespace TestConsoleApp class Program private del
  • Android studio - 如何使用 gradle 中的可执行 jar 文件

    所以我有一个 custom rules xml 文件 我试图在 gradle 中重建 到目前为止 我对其他所有事情都没有问题 但我试图完成的最后一部分是在我使用 gradle 构建过程生成的未签名 apk 上运行一个特殊的 apk 签名工具
  • 使用 PHPExcel 读取 Excel 文件时忽略计算值

    我正在使用 setReadDataOnly true 读取 XLS 文件 读取的对象将再次保存为新的 Excel 文件 不幸的是 某些单元格值计算不正确 这与使用小计公式的单元格的计算错误有关 如果我理解正确的话 XLS 文件中的每个单元格
  • Xcode 5.0:Apple 添加构建规则去哪儿了?

    我在版本 5 0 5A1413 上找不到 添加自定义构建规则 选项 有人注意到了吗 它被移到其他地方了吗 作为解决方法 我在任何构建规则上单击 复制到目标 并对其进行自定义以使其自定义构建 ANSWER 构建规则 gt 自定义 然后选择编辑
  • 如何使用正则表达式提取子字符串

    我有一个字符串 其中有两个单引号 特点 单引号之间是我想要的数据 如何编写正则表达式从以下文本中提取 我想要的数据 mydata some string with the data i want inside 假设您想要单引号之间的部分 请
  • 如何获取 TFS 2013 中所有用户的列表

    我正在使用 Team Foundation Server TFS 2013 和 Visual studio 2012 我需要 TFS 中所有用户的列表 有没有办法使用C 获取TFS中的所有用户 从TFS 2010获取用户列表 您可以尝试使用
  • R ggplot2:stat_count() 不得与条形图中的 y 美学错误一起使用

    我在绘制条形图时遇到此错误 并且无法摆脱它 我已经尝试了 qplot 和 ggplot 但仍然出现相同的错误 以下是我的代码 library dplyr library ggplot2 Investigate data further to
  • 使用Linux虚拟鼠标驱动

    我正在尝试实施一个虚拟鼠标驱动程序根据基本 Linux 设备驱动程序书 有一个用户空间应用程序 它生成坐标以及内核模块 See 虚拟鼠标驱动程序和用户空间应用程序代码 http www embeddedlinux org cn Essent
  • 在 PowerShell 中通过 UDP 发送和接收数据

    我正在尝试编写一个脚本来使用 PowerShell 进行测试和应用 测试应包括通过 UDP 向远程服务器发送字符串 然后读取该服务器的响应并对结果执行某些操作 我需要的唯一帮助是脚本的中间两个步骤 发送字符串 然后 接收响应 在端口 UDP
  • 以管理员身份从 cmd 批处理运行 PowerShell 脚本

    我有一个 PowerShell 设置 我想在执行策略可能受到限制并且需要管理员权限的计算机上执行 理想情况下 我可以将其包装在 cmd 批处理中 如下所示 powershell Command Start Process powershel
  • 使用 BIC 准则运行逐步线性模型

    是否可以设置逐步线性模型来使用 BIC 标准而不是 AIC 我一直在尝试这个 但它仍然使用 AIC 值而不是 BIC 来计算每个步骤 null lm data 1 1 full lm data 1 age bmi gender group
  • 枚举和枚举类之间的区别[重复]

    这个问题在这里已经有答案了 谁能解释一下两者之间的区别 enum Type1 type2 And enum class Type1 type2 我经常使用前者 可能太频繁而没有足够的封装 但我从未使用过第二个例子 Thanks enum A
  • 基于嵌入属性验证 Mongoid 中的嵌入文档

    我有一个订阅者类 它有 embeds many 订阅 订阅具有属性状态 我想添加对状态的验证 以便每个订阅者只有一个订阅可以具有 活动 状态 订户可以拥有多个状态为 已购买 或 已过期 的订阅 这应该可以做到 class Subscribe