鉴于我有一个继承自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
的装饰器。
delegate
行究竟是什么意思?这是否意味着当我尝试访问title
,name
,region
,keys
属性/方法时,它们将被委托给GlassDecorator
? prefix:
部分是什么意思?
对于full_title
方法,glass_title
部分是否尝试在title
中查找GlassDecorator
属性/方法?如果是这种情况,是否仅仅因为delegate
行而成为可能?如果是这样,:prefix
部分是否可以实现?
谢谢。
答案 0 :(得分:2)
1)
:prefix
会将前缀添加到method-name的前面。例如“glass_title”而不仅仅是“title”
delegate
表示如果有人在glass_title
上拨打PageDecorator
,则会在title
上拨打GlassDecorator
并将结果发送给您。 ie - 它将该方法委托给:to
2)是的。你已正确理解