Frage

Ist es posible die Einzigartigkeit eines Kindes Modells Attribut gegen eine polymorphe Beziehung zugeordnet zu validieren?

Zum Beispiel habe ich ein Modell namens field, die fieldable gehört:

class Field < ActiveRecord::Base
  belongs_to :fieldable, :polymorphic => :true
  validates_uniqueness_of :name, :scope => :fieldable_id
end

Ich habe mehrere andere Modelle (Pages, Items), die viele Felder haben. Also, was ich will, ist die Einzigartigkeit des Feldnamen gegen das übergeordnete Modell zu validieren, aber das Problem ist, dass gelegentlich eine Seite und ein Element der gleiche ID-Nummer, die Validierungen verursacht scheitern, wenn sie nicht sollten.

Bin ich nur tun, das falsch oder gibt es einen besseren Weg, dies zu tun?

War es hilfreich?

Lösung

Sie einfach den Anwendungsbereich erweitern den fieldable Typ sind:

class Field < ActiveRecord::Base
  belongs_to :fieldable, :polymorphic => :true
  validates_uniqueness_of :name, :scope => [:fieldable_id, :fieldable_type]
end

Andere Tipps

Sie können auch eine Nachricht hinzufügen, die Standardnachricht außer Kraft zu setzen, oder die Verwendung Rahmen der Validierung hinzuzufügen:

class Field < ActiveRecord::Base
  belongs_to :fieldable, :polymorphic => :true
  validates_uniqueness_of :fieldable_id, :scope => [:fieldable_id, :fieldable_type], :message => 'cannot be duplicated'
end

Als Bonus, wenn Sie Ihre en.yml gehen, und geben Sie ein:

  activerecord:
    attributes:
     field:
       fieldable_id: 'Field'

Sie werden den Standard ‚Subjekt‘ zu ersetzen, die Schienen an den Fehler mit dem man hinzufügen Sie hier angeben. Also anstatt zu sagen: Fieldable Id has been already taken oder so, es würde sagen:

 Field cannot be duplicated
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top