40

在 Rails 2.x 中,您可以使用验证来确保您具有唯一的组合值,如下所示:

validates_uniqueness_of :husband, :scope => :wife

在相应的迁移中,它可能如下所示:

add_index :family, [:husband, :wife], :unique => true

这将确保丈夫/妻子组合在数据库中是唯一的。现在,在 Rails 3 中,验证语法发生了变化,范围属性似乎消失了。现在看起来像:

validates :husband, :presence => true

知道如何在 Rails 3 中实现组合验证吗?Rails 2.x 验证在 Rails 3 中仍然有效,所以我仍然可以使用第一个示例,但它看起来很“旧”,有更好的方法吗?

4

1 回答 1

57

忍受我。ActiveModel 中 validates 方法的工作方式是寻找 Validator。

:presence => true查找PresenceValidator并将 options: 传递true给验证器的初始化程序。

我想你想要

validates :husband, :presence => true, :uniqueness => {:scope => :wife}

(唯一性验证器实际上是 ActiveRecord 的一部分,而不是 ActiveModel。开发人员如何设置它真的很有趣。它非常优雅。)

于 2010-03-28T16:33:15.037 回答