При работе с полиморфными c ассоциациями возможно ли иметь запрос has_many through, который извлекает ВСЕ доступные типы source_types?
Насколько я понимаю, на данный момент каждый тип источника нуждается в собственном методе запроса, так как Я показываю здесь в модели изображения
image.rb
has_many :image_tags
has_many :tags, through: :image_tags, source: :taggable, source_type: 'Tag'
has_many :people, through: :image_tags, source: :taggable, source_type: 'Person'
has_many :businesses, through: :image_tags, source: :taggable, source_type: 'Business'
...
tag.rb
has_many :image_tags, as: :taggable
has_many :images, through: :image_tags
image_tag.rb
belongs_to :image
belongs_to :taggable, polymorphic: true
def build_taggable(params)
self.taggable = taggable_type.constantize.new(params)
end
Однако я хотел бы иметь возможность создать один метод запроса, который извлекает все связанные записи независимо от того, к какому типу источника они могут принадлежать.
Просто подумайте вслух, может ли это привести к созданию какого-то необработанного SQL объединения, которое будет действовать непосредственно на таблицу ImageTags? Или есть более Railsy / ActiveRecordy способ приблизиться к нему?
ОБНОВЛЕНИЕ 20200319:
С тех пор я нашел способ объединения отдельных методов, но это все еще требует создания уникальных методов.
def taggables
tags + people + businesses
end
Это позволяет что-то вроде
i = Image.first
i.crops.map(&:taggables)
Еще не совсем ответ, но пока что это временный обходной путь.