有一个带有自动保存功能的 Rails 模型,我应该验证关联吗?

Posted

技术标签:

【中文标题】有一个带有自动保存功能的 Rails 模型,我应该验证关联吗?【英文标题】:Having a rails model with autosave, should I validate_associated? 【发布时间】:2015-07-17 06:48:07 【问题描述】:

我有一个属于联系人的设备模型:

belongs_to :contact, autosave: true
validates_presence_of :contact

我添加了autosavevalidates_presence_of,因为设备:

需要有效且持久的联系人

关于AutosaveAssociation,应该不需要添加这一行:

validates_associated :contact

因为:If validations for any of the associations fail, their error messages will be applied to the parent

但是,在这种情况下,我收到了以下结果:

> device.valid?
> => true
> device.contact.valid?
> => false

如果自动保存联系人为真而联系人无效,为什么设备有效?

注意:我没有找到关于如何使用 Mongo 自动保存的好的文档。这个问题基于Mongo。我找到了关于使用 ActiveRecord 自动保存的很好的文档,但我想了解它是如何与 mongo 一起工作的。

【问题讨论】:

【参考方案1】:

我在这里发表了评论:https://jira.mongodb.org/browse/MONGOID-4132?focusedCommentId=1033059&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-1033059

您的验证未按预期工作的核心原因是您的架构规定 Device 是子项,而 Contact 是父项。您应该反转这种关系以获得您期望的行为。

【讨论】:

以上是关于有一个带有自动保存功能的 Rails 模型,我应该验证关联吗?的主要内容,如果未能解决你的问题,请参考以下文章

我应该如何在 Rails 中组织这个类似 Instapaper 的功能?

带有 MD5 摘要的 Rails 模型 before_save

带有 jquery datepicker 的 Ruby on rails

如何运行使用我的 Rails 模型的 Ruby 任务?

提交表单时,不会保存对 Rails 输入标记的 javascript 更改

我应该自己保存firebase令牌还是在注册远程通知时自动完成?