validate vs validates_associated

Zar*_*doz 10 validation activerecord ruby-on-rails

有一个validate可以直接用于关联的说明符(参见本Rails指南中的 4.1.2.12 以及validates_associated(参见Rails指南中的 3.2 ).两者有何区别?

Ari*_*jan 2

他们都验证关联的模型。

不同之处在于,第一个是关联上的选项(例如belongs_tohas_many等)。例如,您在关联中定义“验证行为”。

在经典的“作者有很多书”示例中,假设您启用了belongs_to :author, :validate => trueBook 模型。每次验证 Book 模型时,关联的作者也必须有效。

另一个是单独的验证规则,您可以将其添加到其他验证中。因此,在这种情况下,您可以启用关联对象的验证以及其他验证规则。

反过来也可以。作者:has_many :books ; validates_associated :books. 当您验证 Author 对象时,所有书籍也会被验证。

  • 我和 @zardox 有完全相同的问题,但我不确定这是否真的能回答它。您能否解释一下这两种方法之间除了声明位置之外的实际区别是什么。您是否认为,在第一种情况下,这本书实际上对作者产生了验证背压,并在该书无效时强制作者无效?这看起来不太封装。 (3认同)
  • 泰勒,看来使用 :validate 选项或使用单独的 validates_linked 方法之间的 has_many 的主要区别在于:validate 允许您禁用 has_many 关联上的验证(根据文档,has_many 上默认情况下为 true),而 validates_linked有多种选项(:unless、:if、:on (context)),这些选项不可用于内联 :validate 选项。 (3认同)