Доступ к ассоциациям в Rails
-
20-08-2019 - |
Вопрос
Есть ли способ получить список моделей, которым принадлежит конкретная модель в 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
Надеюсь, это имеет какой-то смысл!
Решение
Это даст вам хэш объектов, описывающих ассоциации и другие вещи в данной модели. Model.reflections
.Вам нужны все значения в хеше, которые Reflection::AssociationReflection
занятия.Этот код должен предоставить вам нужный массив:
association_names = []
Model.reflections.each { |key, value| association_names << key if value.instance_of?(ActiveRecord::Reflection::AssociationReflection) }
Другие советы
Вы можете использовать один массив для определения ассоциаций и использования в проверках, например:
BELONGS_TO_LIST = w%{ project task }
BELONGS_TO_LIST.each {|b| belongs_to b}
validates_inclusion_of :status_of, :in => BELONGS_TO_LIST
Не связан с StackOverflow