2

这是一个装饰器

应用程序/装饰器/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返回未格式化的日期。

谁能告诉我我错过了什么?

4

1 回答 1

5

这不是您使用 Draper Decorator 的方式。

第一件事:

  • CampaignDecorator.custom_method试图找到custom_method在 CampaignDecorator 类中调用的类方法。这绝对不是你想要的。

  • CampaignDecorator.first.created_at查找CampaignDecorator类的对象并在那里操作(没有记录,所以first返回 nil)

你需要做的实际上是装饰你的模型。检查文档

您首先需要将功能添加到您的模型中:

class CampaignDecorator
  decorates :campaign
end

简而言之,你可以做

@campaign = Campaign.first.decorate

@campaigns = CampaignDecorator.decorate_collection(Campaign.all)

@campaigns = Campaign.scoped.decorate
于 2014-08-06T15:21:05.983 回答