2

同じモデル内の 2 つ以上のフィールドの一意性を検証する方法はありますか? たとえば、フィールド:nameとがあるとしましょう:zip。許容可能なセットはありますが、同じテーブルに含める{[name1, zip1], [name1, zip2]}ことはできません。{[name1,zip1],[name1,zip1]}

validates使用できるレールメソッドはありますか?

4

3 に答える 3

2

他の人が言ったように検証を使用してこれを行うことができますが、テーブルに一意のインデックスを追加することもできます。これにより、データベース層に重複が挿入されるのを防ぎ、選択速度が向上します。そのための新しい移行を作成する必要がありますrails g migration addUniqueIndexForZipAndNameToTablename

add_index :tablename, [:name, :zip], :unique => true

発生する可能性のある唯一の問題は、重複を挿入しようとするとMySQLエラーが発生することです.

begin
  # insert,...
rescue ExceptionHere
  # do sth...
end
于 2012-07-09T13:06:14.883 に答える
2

使用する必要がありますscope

  validates_uniqueness_of :name, :scope => [:zip]

詳細については、ドキュメントガイドを参照してください。

:scopeオプションを使用して、一意性チェックを制限するために使用される他の属性を指定できます。

于 2012-07-09T07:35:42.957 に答える
2

別の方法

validates :name, :uniqueness => {:scope => [:zip]}
于 2012-07-09T07:37:41.287 に答える