Доступ к ассоциациям в Rails - PullRequest
5 голосов
/ 26 января 2009

Есть ли способ получить список моделей, к которым принадлежит конкретная модель в 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

Надеюсь, это имеет какой-то смысл!

Ответы [ 2 ]

6 голосов
/ 26 января 2009

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

association_names = []
Model.reflections.each { |key, value| association_names << key if value.instance_of?(ActiveRecord::Reflection::AssociationReflection) }
3 голосов
/ 26 января 2009

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

BELONGS_TO_LIST = w%{ project task }
BELONGS_TO_LIST.each {|b| belongs_to b}
validates_inclusion_of :status_of, :in => BELONGS_TO_LIST
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...