/ / Come convalidare nel database per unicità? - ruby-on-rails, validazione, ruby-on-rails-4

Come convalidare nel database per l'unicità? - ruby-on-rails, validation, ruby-on-rail-4

Sto usando Rails 4.2 con Ruby 2.1.5.

Ecco la mia tabella API:

create_table "apis", force: :cascade do |t|
t.string   "name"
t.datetime "created_at"
t.datetime "updated_at"
t.string   "status"
t.string   "coname"
end

Come convalidare che un utente non può creare due volte un'API con lo stesso nome e lo stesso stato?

Ad esempio, (nome) "ABC" con (stato) "buono" esiste già e la prossima volta non è possibile crearlo nuovamente.

risposte:

3 per risposta № 1

Devi inserire questa convalida nel tuo modello Api:

validates :name, uniqueness: { scope: :status, message: "your custom message" }

http://guides.rubyonrails.org/active_record_validations.html#uniqueness


3 per risposta № 2

È possibile utilizzare un indice univoco nel database e / o una convalida di unicità nella classe del modello di rotaie.

L'indice univoco verrebbe impostato in una migrazione, in questo modo:

class AddUniqueIndexToApis < ActiveRecord::Migration
add_index :apis, [:name, :status], unique: true
end

E la validazione sarebbe qualcosa del genere:

class Api < ActiveRecord::Model
validates :name, uniqueness: { scope: :status }
end

0 per risposta № 3

Puoi assicurarti che in entrambi model e migrationfile. Ti suggerirò di farlo in entrambi i posti, ma funzionerà anche solo il modello / migrazione.

Si noti che l'applicazione delle restrizioni all'interno del modello ti fornirà errori sull'oggetto.

Nel tuo file di migrazione:

def change
create_table "apis", force: :cascade do |t|
t.string   "name"
t.datetime "created_at"
t.datetime "updated_at"
t.string   "status"
t.string   "coname"
end
add_index :name, :status, unique: true
end

E nel tuo modello:

class ApiModel < ActiveRecord::Model
validates :name, uniqueness: { scope: :status }
end