40

Rails 2.x では、検証を使用して、次のような一意の組み合わせ値があることを確認できます。

validates_uniqueness_of :husband, :scope => :wife

対応する移行では、次のようになります。

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

これにより、夫と妻の組み合わせがデータベース内で一意になるようになります。現在、Rails 3 では検証構文が変更され、scope 属性がなくなっているようです。次のようになります。

validates :husband, :presence => true

Rails 3で結合された検証をどのように達成できるか考えていますか? Rails 2.x のバリデーションは Rails 3 でも機能するので、最初の例を引き続き使用できますが、「古い」ように見えます。より良い方法はありますか?

4

1 に答える 1

57

我慢してください。ActiveModel の validates メソッドが機能する方法は、Validator を探すことです。

:presence => truePresenceValidatoroptions: を探してバリデータのイニシャライザに渡しますtrue

私はあなたが欲しいと思います

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

(一意性バリデーターは、実際には ActiveModel ではなく ActiveRecord の一部です。開発者がこれをどのように設定したかは非常に興味深いものです。非常に洗練されています。)

于 2010-03-28T16:33:15.037 に答える