我正在处理一个gallery_collection,它有_many collection_objects,并通过这些collection_objects有_many enhanced_objects
class Collection < ActiveRecord::Base
has_many :collection_objects, inverse_of: :gallery_collection
has_many :enhanced_objects, through: :collection_objects
最终,在我的GalleryCollection视图中,我公开了单个enhanced_objects,并且我希望公开通过EnhancedObject装饰器可用的方法。在我的特定示例中,我希望能够调用方法object_record_url
如果我装饰gallery_collection,我也可以通过使用GalleryCollectionDecorator中的decorates_association
装饰collection_objects
class GalleryCollectionDecorator < Draper::Decorator
include ActionView::Helpers::UrlHelper
delegate_all
decorates_association :collection_objects, with: CollectionObjectDecorator
这很好用,但是我希望能够从collection_objects中访问一个特定的enhanced_object,并且它也被装饰。
我还尝试在CollectionObjectDecorator中使用decorates_association
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
enhanced_object.object_record_url
--返回no方法错误,因为它不能访问decorator方法
我希望能够访问我从GalleryCollection访问的enhanced_object的装饰器方法。有没有办法使用decorates_association来实现这一点,或者有没有更好的、更“Rails”的方法来实现这一点?
1条答案
按热度按时间7hiiyaii1#
decorates_association :enhanced_objects, with: EnhancedObjectDecorator
最坏的情况下,只需编写您自己的ruby: