这是一个装饰工

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

10-04 11:45