2 Stimmen

Einzigartig auf drei verschiedenen Gebieten

Ich arbeite an einer Ruby on Rails-Webanwendung. Ich möchte die Eindeutigkeit von mehr als einem Feld zusammen überprüfen. Wie kann ich dies tun?

Zum Beispiel: Ich habe ein Modell namens waiting mit drei Feldern:

project_id category_id y user_id

Ich möchte sicherstellen, dass ich nicht zwei identische Zeilen in todo drei Bereiche.

2voto

Dmitry Polushkin Punkte 3063

Warum nicht einfach so:

validates_uniqueness_of :user_id, :scope => [:project_id, :category_id]

+

add_index :waitings, [:project_id, :category_id, :user_id], :unique => true

API lesen:

-1voto

noodl Punkte 16947

Es ist nicht schön, aber für mich funktioniert das:

class Waiting < ActiveRecord::Base
  validate :must_be_unique

  def must_be_unique
    if self.class.where(project_id: project_id, category_id: category_id, user_id: user_id).exists?
      errors.add(:base, 'Must be unique')
    end
  end
end

Natürlich können Sie auch einfach einen eindeutigen Schlüssel in Ihrem Datenbankschema verwenden und dann die entsprechenden Ausnahmen abfangen, wenn dies erforderlich ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X