Rails 3-Validierung auf Eindeutigkeit mehrerer Attribute

177

Ich benutze Rails 3.0.0.beta4

Ich möchte eine Validierung der Eindeutigkeit für zwei Attribute hinzufügen. Dies bedeutet, dass mein Modell gültig ist, wenn das Paar von 'recorded_at'und 'zipcode'eindeutig ist.

Zu einem Attribut gehört hier die Syntax

validates :zipcode, :uniqueness => true

Vielen Dank

Denisjacquemin
quelle

Antworten:

333

In Rails 2 hätte ich geschrieben:

validates_uniqueness_of :zipcode, :scope => :recorded_at

In Schienen 3:

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

Für mehrere Attribute:

validates :zipcode, :uniqueness => {:scope => [:recorded_at, :something_else]}
Christian Lescuyer
quelle
7
Ich würde sagen, dass es logischerweise sinnvoller ist zu sagen, dass Sie recorded_atim Rahmen einer Postleitzahl eindeutig sein müssen. validate :recorded_at, : uniqueness => { :scope => :zipcode }
Ariejan
2
Sie können es immer noch in zwei Richtungen tun, und ich finde das besser lesbar, es sei denn, Sie führen mehrere Validierungsarten für dieselbe Eigenschaft durch.
zem
24
Würden Sie eine Dreiergruppe mit validieren validates :zipcode, :uniqueness => {:scope => [:recorded_at, :something_else]}?
Greg Guida
5
Ich würde hinzufügen, dass, wenn Sie :scopefür Fremdschlüssel verwenden möchten , Sie die :fkey_idSymbole anstelle von :fkeydenen verwenden müssen, auch wenn ein "grundlegendes" :uniquenessauf:fkey
nbarraille
1
Sie möchten wahrscheinlich eine benutzerdefinierte Fehlermeldung wie, :message => ' is taken for this recorded date'
laffuste
96

Parameter für mehrere Bereiche:

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

Dies sollte Gregs Frage beantworten.

Strahl
quelle
Greg schien mehr daran interessiert zu sein, die 'Validates'-Verknüpfung zu verwenden, daher lautet eine schnellere Antwort auf seine Frage "Ja"
elc
Dies ist sehr wichtig zu wissen. Ich habe genau darauf geachtet, ob ich die _id verwenden soll (oder nicht), wenn ich nach Zuordnungen in Bereichen suche.
Francesco Belladonna
Diese Antwort funktioniert in Rails 4.1.6 validates_uniqueness_of: cart_id, scope: [: location_id ,: plug_id]
Conor
6

Arbeiten Sie nicht für mich, müssen Sie den Umfang im Plural setzen

validates_uniqueness_of: Teacher_id ,: scope s => [: semester_id ,: class_id]

Jesus
quelle