2

ここにデコレータがあります

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フォーマットされていない日付も返します。

何が欠けているのか誰か教えてください。

4

1 に答える 1

5

それは Draper Decorator の使い方ではありません。

まず最初に:

  • CampaignDecorator.custom_methodcustom_methodCampaignDecorator クラスで呼び出されるクラス メソッドを見つけようとします。これは間違いなくあなたが望むものではありません。

  • 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 に答える