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!

War es hilfreich?

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
scroll top