rails 3複数の属性の一意性の検証


177

Rails 3.0.0.beta4を使用しています

2つの属性の一意性の検証を追加します。つまり、'recorded_at'とのカップル'zipcode'が一意である場合、モデルは有効です。

ここにある属性は構文です

validates :zipcode, :uniqueness => true

ありがとう

回答:


333

Rails 2では、私は次のように書いたでしょう:

validates_uniqueness_of :zipcode, :scope => :recorded_at

Rails 3の場合:

validates :zipcode, :uniqueness => {:scope => :recorded_at}

複数の属性の場合:

validates :zipcode, :uniqueness => {:scope => [:recorded_at, :something_else]}

7
論理的にrecorded_atは、郵便番号の範囲内で一意である必要があると言う方が理にかなっていると思います。 validate :recorded_at, : uniqueness => { :scope => :zipcode }
アリヤン

2
2つの方法でRailsを実行できますが、同じプロパティで複数の種類の検証を行わない限り、より読みやすくなります。
11

24
あなたは3つのグループを検証しvalidates :zipcode, :uniqueness => {:scope => [:recorded_at, :something_else]}ますか?
グレッググイダ

5
私はあなたが使用したい場合は、その追加することになり:scope、外部キーの上に、あなたが使用する必要がある:fkey_idのではなく、記号を:fkey「基本」はあっても、ものの:uniqueness上で動作します:fkey
nbarraille

1
おそらく次のようなカスタムエラーメッセージを追加したいと思います, :message => ' is taken for this recorded date'
laffuste

96

複数のスコープパラメータ:

class TeacherSchedule < ActiveRecord::Base
  validates_uniqueness_of :teacher_id, :scope => [:semester_id, :class_id]
end

http://apidock.com/rails/ActiveRecord/Validations/ClassMethods/validates_uniqueness_of

これはグレッグの質問に答えるはずです。


グレッグは 'validates'ショートカットを使用することに興味を持っているようだったので、彼の質問に対するより速い答えは「はい」です
elc

これは知っておくことが非常に重要です。スコープ内の関連付けをチェックするときに_idを使用する必要があるかどうかを正確に調べていました。
Francesco Belladonna 2013

この回答はRails 4.1.6で機能しますvalidates_uniqueness_of:cart_id、scope:[:location_id、:plug_id]
Conor

6

私には効かない、スコープ複数にする必要がある

validates_uniqueness_of:teacher_id、:scope s => [:semester_id、:class_id]

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.