2013-07-08 47 views
0

我正在使用Draper將裝飾器添加到幾個模型中,我有一些裝飾器用於「裝飾」另一個模型(我的用戶模型)的一個模型(我的文檔模型) 。我怎樣才能做到這一點?如何在關聯對象中包含draper裝飾器

我試過把這個放在我的文檔裝飾器中,但它不起作用。

decorates_association :user 

**[decorators here]** 

class UserDecorator < ApplicationDecorator 
    decorates :user 
end 

,並將此向我​​的用戶控制器:

def show 
    @user = UserDecorator.find(params[:id]) 
end 

三江源提前!

回答

1

它看起來像你已經有了一個ApplicationDecorator設置。如果您有想要模型之間共享的裝飾方法,你可以將它們包含在你的ApplicationDecorator這樣的:

class ApplicationDecorator < Draper::Decorator 
    def name 
    model.name 
    end 

    def created 
    model.created_at.strftime("%m/%d/%Y") 
    end 
end 

如果你設置你的UserDecorator和DocumentDecorator這樣的:

class UserDecorator < ApplicationDecorator 
    delegate_all 
end 

class DocumentDecorator < ApplicationDecorator 
    delegate_all 
end 

那麼任何在ApplicationDecorator(名稱,創建等)中定義的裝飾器方法將可用於裝飾用戶和裝飾文檔。

我們有幾個項目,我們正在使用類似的設置來共享多個模型之間的裝飾器方法,以獲取日期和時間格式,狀態等常見屬性。希望這有幫助。

+0

繼承是否有某種方式來分享,讓我們說,只有5款車型之間的3種方法,但不共享與模型的其餘那些方法?在這種情況下使用'ApplicationDecorator'不適用。裝飾者有沒有像'關注'的東西? – kovpack

0

對於其他機型,你不希望共享邏輯與能夠直接從德雷珀::裝飾而不是從ApplicationDecorator繼承。 只有5款車型應該從ApplicationDecorator

@kovpack

相關問題