Мне нужно выполнить операции со всеми объектами, связанными с объектом ActiveRecord Rails 5, но я не хочу явно писать отдельный вызов метода для каждого объекта.
Например, скажем, «отпуск» объект, с которым я имею дело, и он может иметь много связанных объектов (для простоты предположим, что все имеет has_one): агент, путешественник, самолет, корабль, гостиница. Я мог бы сделать:
do_stuff_to_assoc_object (отпуск.агент)
do_stuff_to_assoc_object (отпуск.травеллер)
do_stuff_to_assoc_object (отпуск.план) ... et c.
но это очень не элегантно, особенно если есть много ассоциаций. Благодаря Как получить все связанные модели из объекта ActiveRecord? , я знаю, что могу получить имена классов моделей связанных объектов как строки или объект AssociationReflection, но как это сделать? Я получаю фактический объект , который они представляют?
parent_object.reflect_on_all_associations(:has_one).map(&:class_name).each do |model_name|
### how to convert model_name into the object?
do_stuff_to_assoc_object(obj)
end
def do_stuff_to_assoc_object(obj)
# I do things to the associated object here
end