2009-01-26 22 views
5

¿Hay alguna manera de que pueda obtener una lista de los modelos a los que pertenece un modelo en particular en Rails?Accediendo a asociaciones en Rails

Por ejemplo:

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 

Espero que esto tenga algún tipo de sentido!

Respuesta

6

Esto le dará un hash de los objetos que describen las asociaciones y otras cosas en un modelo dado Model.reflections. Desea que todos los valores en el hash que son Reflection::AssociationReflection clases. Este código debe obtener la matriz que desea:

association_names = [] 
Model.reflections.each { |key, value| association_names << key if value.instance_of?(ActiveRecord::Reflection::AssociationReflection) } 
+0

¡Exactamente lo que estaba buscando! Muchas gracias. –

+0

Awesome answer. Spot on. – Tilendor

3

Se puede utilizar una matriz para definir las asociaciones y su uso en las validaciones como:

BELONGS_TO_LIST = w%{ project task } 
BELONGS_TO_LIST.each {|b| belongs_to b} 
validates_inclusion_of :status_of, :in => BELONGS_TO_LIST 
+0

Gracias. No es el método en el que estaba pensando pero funciona de maravilla. –

Cuestiones relacionadas