2009-01-26 3 views
5

Есть ли способ получить список моделей, к которым принадлежит определенная модель в Rails?Доступ к ассоциациям в Rails

Например:

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 

Надежда это делает какой-то смысл!

ответ

6

Это поможет вам хэш объектов, описывающих ассоциации и другие вещи на данной модели Model.reflections. Вы хотите, чтобы все значения в хэши составляли классы Reflection::AssociationReflection. Этот код должен указывать необходимый вам массив:

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

Точно, что я искал! Большое спасибо. –

+0

Удивительный ответ. Пятно на. – Tilendor

3

Вы можете использовать один массив для определения ассоциаций и использования в валидаций как:

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

Thanks. Не метод, о котором я думал, но он работает. –

Смежные вопросы