Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Accessing associations in Rails

Is there a way that I can get a list of the models that a particular model belongs to in Rails?

For example:

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 this makes some kind of sense!

like image 770
mr_urf Avatar asked Jan 26 '09 16:01

mr_urf


1 Answers

This will get you a hash of objects describing the associations and other things on a given model Model.reflections. You want all the values in the hash that are Reflection::AssociationReflection classes. This code should get you the array you want:

association_names = []
Model.reflections.each { |key, value| association_names << key if value.instance_of?(ActiveRecord::Reflection::AssociationReflection) }
like image 117
Otto Avatar answered Sep 16 '22 13:09

Otto