【问题标题】:How to validate that a parent object has a valid child object (Rails)如何验证父对象是否具有有效的子对象(Rails)
【发布时间】:2011-02-12 02:32:00
【问题描述】:

假设我有一个名为 Book 的 ActiveRecord 模型,它与模型 Pages 具有 has_many 关联。

class Book < ActiveRecord::Base
  has_many :pages
end

我想知道是否有一种已建立 方法可以确保在没有至少一个有效的 Page 对象与之关联的情况下无法将 Book 对象保存到数据库中。我的目标不是测试关联的存在,而是验证父对象确实具有有效的子对象。这有意义吗?这实际上是一个测试关联的案例吗?我对“validates_associated”方法很熟悉,但是如果没有分配关联,这个验证不会失败,但是如何确保关联的另一端有有效的对象呢?

【问题讨论】:

    标签: ruby-on-rails unit-testing associations


    【解决方案1】:

    来自validates_associated 的 Rails 2.3.2 文档:

    注意:此验证不会失败,如果 该关联尚未分配。 如果你想确保 关联既存在又 保证有效,还需要 使用validates_presence_of

    【讨论】:

    • Sugerman, validates_presence_of 如果我试图验证 Page 是否具有 Book 的外键,则可以使用。我想验证另一个方向,如验证 Book 有一个 Page
    • 我尝试了与以下类似的方法:class Page &lt; ActiveRecord::Base validates :book_id, :presence =&gt; true validates :book, :associated =&gt; true end 通过此验证,当我尝试保存没有相关书籍的页面时会标记错误。当我保存没有页面的书时,不会标记错误。我错过了什么吗?
    • 将验证放在您的图书类中。 validates_presence_of: pages, validates_associated: pages
    • 啊!那行得通。我没有意识到我可以在子对象的集合上使用validates_presence_of。谢谢。
    猜你喜欢
    • 2017-05-08
    • 2023-03-31
    • 2019-03-24
    • 2013-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多