Ho un Release
modello con medium
e country
colonne (tra gli altri). Non dovrebbe esserci releases
condivisione identica medium
/ country
combinazioni.
Come lo scriverei come convalida delle rotaie?
Ho un Release
modello con medium
e country
colonne (tra gli altri). Non dovrebbe esserci releases
condivisione identica medium
/ country
combinazioni.
Come lo scriverei come convalida delle rotaie?
Risposte:
È possibile utilizzare una convalida di unicità conscope
opzione.
Inoltre, è necessario aggiungere un indice univoco al DB per evitare che i nuovi record passino le convalide quando vengono controllati contemporaneamente prima di essere scritti:
class AddUniqueIndexToReleases < ActiveRecord::Migration
def change
add_index :releases, [:country, :medium], unique: true
end
end
class Release < ActiveRecord::Base
validates :country, uniqueness: { scope: :medium }
end
unique
come non è riconosciuto. Per quella parte ho usato la risposta qui sotto.
uniqueness
, no unique
. Vedi la documentazione collegata. Risolvere la risposta.
Mancano tutte le risposte sopra riportate su come convalidare l'unicità di più attributi in un modello. Il codice seguente intende dire come utilizzare più attributi in un ambito.
validates :country, uniqueness: { scope: [:medium, :another_medium] }
Convalida l'unicità di country
in tutte le righe con i valori di medium
e another_medium
.
Nota: non dimenticare di aggiungere un indice nella colonna sopra, questo assicura un rapido recupero e aggiunge una convalida a livello di DB per record univoci.
Aggiornamento: per aggiungere un indice durante la creazione della tabella
t.index [:medium, :another_medium], unique: true
Puoi passare un :scope
parametro al tuo validatore in questo modo:
validates_uniqueness_of :medium, scope: :country
Vedere la documentazione per alcuni altri esempi.