Zugriff auf Verbände in Rails
-
20-08-2019 - |
Frage
Gibt es eine Möglichkeit, dass ich eine Liste der Modelle erhalten kann, die ein bestimmtes Modell in Rails gehört?
Zum Beispiel:
class Project < ActiveRecord::Base
has_one :status
...
end
class Task < ActiveRecord::Base
has_one :status
...
end
class Status < ActiveRecord::Base
belongs_to :project
belongs_to :task
# this is where I want to be able to pass in an array of the associations' class
# names (to be used for checking input) rather than having to do w%{ project task }
# which leaves it open to failure if I add new associations in future
validates_inclusion_of :status_of, :in => ?
...
end
Hope dies macht eine Art von Sinn!
Lösung
Dies wird Ihnen einen Hash von Objekten erhalten die Verbände und andere Dinge auf einem bestimmten Modell Model.reflections
beschreibt. Sie möchten alle Werte in der Hash, Reflection::AssociationReflection
Klassen sind. Dieser Code sollte Sie das Array erhalten Sie:
association_names = []
Model.reflections.each { |key, value| association_names << key if value.instance_of?(ActiveRecord::Reflection::AssociationReflection) }
Andere Tipps
Sie können einen Array verwenden, um die Verbände zu definieren und in den Validierungen verwenden wie:
BELONGS_TO_LIST = w%{ project task }
BELONGS_TO_LIST.each {|b| belongs_to b}
validates_inclusion_of :status_of, :in => BELONGS_TO_LIST
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow