convalida di rails 3 sull'unicità su più attributi


177

Uso Rails 3.0.0.beta4

Voglio aggiungere una convalida sull'unicità su due attributi, ciò significa che il mio modello è valido se la coppia di 'recorded_at'ed 'zipcode'è unico.

Su un attributo qui c'è la sintassi

validates :zipcode, :uniqueness => true

Grazie

Risposte:


333

In Rails 2 avrei scritto:

validates_uniqueness_of :zipcode, :scope => :recorded_at

In Rails 3:

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

Per più attributi:

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

7
Direi che logicamente ha più senso dire che devi recorded_atessere unico nell'ambito di un codice postale. validate :recorded_at, : uniqueness => { :scope => :zipcode }
Ariejan,

2
puoi ancora farlo nel modo 2 rotaie e lo trovo più leggibile a meno che tu non stia facendo diversi tipi di convalida sulla stessa proprietà.
zem,

24
Convalideresti un gruppo di tre persone con validates :zipcode, :uniqueness => {:scope => [:recorded_at, :something_else]}?
Greg Guida,

5
Vorrei aggiungere che se si desidera utilizzare :scopesu chiavi esterne, è necessario utilizzare i :fkey_idsimboli, invece di :fkeyquelli, anche se una "base" :uniquenesslavora su:fkey
nbarraille

1
Probabilmente vuoi aggiungere un errore personalizzato come, :message => ' is taken for this recorded date'
laffuste

96

Parametri di ambito multiplo:

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

Questo dovrebbe rispondere alla domanda di Greg.


Greg sembrava più interessato all'utilizzo del collegamento 'validates', quindi una risposta più rapida alla sua domanda è "si"
elc,

Questo è abbastanza importante da sapere, stavo cercando esattamente questo se dovessi usare _id (o no) quando controllavo le associazioni negli ambiti.
Francesco Belladonna,

Questa risposta funziona in Rails 4.1.6 validates_uniqueness_of: cart_id, ambito: [: location_id,: plug_id]
Conor,

6

Non lavorare per me, è necessario mettere lo scope al plurale

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.