同じモデル内の 2 つ以上のフィールドの一意性を検証する方法はありますか? たとえば、フィールド:name
とがあるとしましょう:zip
。許容可能なセットはありますが、同じテーブルに含める{[name1, zip1], [name1, zip2]}
ことはできません。{[name1,zip1],[name1,zip1]}
validates
使用できるレールメソッドはありますか?
同じモデル内の 2 つ以上のフィールドの一意性を検証する方法はありますか? たとえば、フィールド:name
とがあるとしましょう:zip
。許容可能なセットはありますが、同じテーブルに含める{[name1, zip1], [name1, zip2]}
ことはできません。{[name1,zip1],[name1,zip1]}
validates
使用できるレールメソッドはありますか?
他の人が言ったように検証を使用してこれを行うことができますが、テーブルに一意のインデックスを追加することもできます。これにより、データベース層に重複が挿入されるのを防ぎ、選択速度が向上します。そのための新しい移行を作成する必要がありますrails g migration addUniqueIndexForZipAndNameToTablename
add_index :tablename, [:name, :zip], :unique => true
発生する可能性のある唯一の問題は、重複を挿入しようとするとMySQLエラーが発生することです.
begin
# insert,...
rescue ExceptionHere
# do sth...
end
別の方法
validates :name, :uniqueness => {:scope => [:zip]}