Я работаю с набором gallery_collection, у которого has_many collection_objects и has_many улучшенных_объектов с помощью этих collection_objects
class Collection < ActiveRecord::Base
has_many :collection_objects, inverse_of: :gallery_collection
has_many :enhanced_objects, through: :collection_objects
В конечном итоге в моем представлении GalleryCollection я представляю отдельные расширенные_объекты и хочу показать методы, доступные через EnhancedObject.декоратор.В моем конкретном примере я хочу иметь возможность вызывать метод object_record_url
Если я декорирую gallery_collection, я также могу декорировать collection_objects с помощью decorates_association
в GalleryCollectionDecorator
class GalleryCollectionDecorator < Draper::Decorator
include ActionView::Helpers::UrlHelper
delegate_all
decorates_association :collection_objects, with: CollectionObjectDecorator
Это хорошо работает, но затем я хочу иметь возможность получить доступ к конкретному расширенному объекту из коллекции collection_objects и для его оформления.
Я также пытался использовать decorates_association
в CollectionObjectDecorator
class CollectionObjectDecorator < Draper::Decorator
delegate_all
decorates_association :enhanced_objects, with: EnhancedObjectDecorator
end
но, похоже, это не работает, когда я запускаю каскад украшений с уровня GalleryCollection.
В настоящее время я проверяю результаты в консоли с помощью следующего:
collection = GalleryCollection.find(3)
decorated_col = collection.decorate
- возвращает GalleryCollectionDecorator
collection_objects = decorated_col.collection_objects
- возвращает CollectionObjectDecorator
enhanced_object = collection_objects[0].enhanced_object
- возвращает неокрашенный улучшенный_объект
enhanced_object.object_record_url
- возвращает метод без методаошибка, поскольку он не имеет доступа к методу декоратора
Я хотел бы иметь возможность получить доступ к методу декораторас расширенного объекта, к которому я обращаюсь из GalleryCollection.Есть ли способ сделать это, используя decorates_association, или есть лучший, более «рельсовый» способ добиться этого?