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

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]}

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.


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]

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.