Schienen AR validates_uniqueness_of gegen polymorphe Beziehung
-
23-09-2019 - |
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?
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