这是一个装饰工
app / decorators / campaign_decorator.rb
class CampaignDecorator < Draper::Decorator
delegate_all Campaign::Campaign
def created_at
helpers.content_tag :span, class: 'time' do
object.created_at.strftime("%a %m/%d/%y")
end
end
def custom_method
'hello there!'
end
end
当我调用
CampaignDecorator.custom_method
时,找不到方法。同样,CampaignDecorator.first.created_at
返回未格式化的日期。谁能告诉我我想念什么?
最佳答案
那不是您使用Draper Decorator的方式。
第一件事:CampaignDecorator.custom_method
试图在CampaignDecorator类中找到一个名为custom_method
的类方法。绝对不是您想要的。CampaignDecorator.first.created_at
查找CampaignDecorator
类的对象并在那里进行操作(没有记录,因此first
返回nil)
您实际上需要装饰模型。检查documentation。
您首先需要将功能添加到模型中:
class CampaignDecorator
decorates :campaign
end
简而言之,你可以做
@campaign = Campaign.first.decorate
@campaigns = CampaignDecorator.decorate_collection(Campaign.all)
@campaigns = Campaign.scoped.decorate