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でも引き続き機能するため、最初の例を使用できますが、「古い」ように見えますが、もっと良い方法はありますか?
私と一緒に。 ActiveModelのvalidatesメソッドが機能する方法は、Validatorを探すことです。
:presence => true
はPresenceValidator
を探し、オプション:true
をバリデーターの初期化子に渡します。
あなたが欲しいと思う
validates :husband, :presence => true, :uniqueness => {:scope => :wife}
(一意性検証ツールは、実際にはActiveModelではなくActiveRecordの一部です。開発者がこれを設定した方法は非常に興味深いものです。非常にエレガントです。)