2013-12-19 22 views
2

考慮到我有一個類,從Draper::Decorator繼承,像這樣:布店 - 幫助理解代表與「到」和「前綴」

class PageDecorator < Draper::Decorator 
    delegate_all 

    delegate :title, :name, :region, :keys, 
     to: :glass_decorator, 
     prefix: :glass 

    def full_title 
    full_title = [] 
    full_title << glass_title if glass_title 
    full_title.join(" ") 
    end 

有一個裝飾在另一個文件名爲GlassDecorator在同一目錄。

  1. delegate這一行實際上是什麼意思?這是否意味着當我嘗試訪問title,name,region,keys屬性/方法時,它們將被委託給GlassDecoratorprefix:部分是什麼意思?

  2. 對於full_title方法,是否glass_title部分嘗試查找在GlassDecoratortitle屬性/方法?如果是這樣的話,是否僅僅因爲delegate這條線纔有可能?如果是這樣,是否使:prefix成爲可能?

謝謝。

回答

2

1) :prefix會將前綴添加到方法名的前面。例如「glass_title」而不是「title」 delegate意味着如果有人在您的PageDecorator上撥打glass_title,它將會打電話title並將GlassDecorator交給您。即 - 它將該方法委託給:to中的對象

2)是。你已經明白了,正確的

+0

嗯,我說得對,如果我在代碼中保留所有內容並且省略了'prefix:'部分,並且我嘗試訪問'title',那麼將首先查找'PageDecorator',那麼如果它不存在,'Glass'將在'GlassDecorator'中查找,如果失敗了,在裝飾對象中? – yanhan

+0

我不這麼認爲。如果你有「委託」,它不會看你當前的模型。如果您在PageDecorator上有一個名爲「title」的方法,它將使委託的過載超載。 –

+0

哦,好的,謝謝Taryn! – yanhan