Ho un Releasemodello con mediume countrycolonne (tra gli altri). Non dovrebbe esserci releasescondivisione identica medium/ countrycombinazioni.
Come lo scriverei come convalida delle rotaie?
Ho un Releasemodello con mediume countrycolonne (tra gli altri). Non dovrebbe esserci releasescondivisione identica medium/ countrycombinazioni.
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
uniquecome 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 countryin tutte le righe con i valori di mediume 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 :scopeparametro al tuo validatore in questo modo:
validates_uniqueness_of :medium, scope: :country
Vedere la documentazione per alcuni altri esempi.