ошибка неопределенного метода draper gem

Я пытаюсь использовать драгоценный камень драпировщика и похоже, что я настроил его очень хорошо, однако, когда я вызываю метод внутри своего метода драпировщика, я получаю «ошибку неопределенного метода». Вот что я сделал до сих пор.

gem 'draper'

bundle install

rails g decorator MyModel

в моем декораторе у меня есть следующий код.

class TaskDecorator < Draper::Decorator
  delegate_all
  decorates :task

  def dummy

    print "Hello World"

  end
end

В моем контроллере

  # GET /tasks/1
  # GET /tasks/1.json
  def show
    @task = TaskDecorator.find_by(:id => params[:id])
  end

Мой взгляд

<%= @task.dummy %>

Запускаю в браузере, получаю следующую ошибку

undefined method `dummy' for #<Task:0x007fad7a639d48>

Есть идеи, что не так?


person Harish    schedule 28.01.2014    source источник


Ответы (2)


Я решил эту проблему, заменив ваш:

TaskDecorator.find_by(:id => params[:id])

с:

Task.find(params[:id]).decorate

(EDIT: не было достаточно репутации, чтобы прокомментировать исходный вопрос, поэтому первоначальный ответ спрашивал, нашел ли OP решение. Теперь отредактировано, чтобы включить решение, которое я нашел. По общему признанию, старый пост, но оставляю его здесь на случай, если кто-нибудь еще столкнется та же проблема.)

person aurumpotestasest    schedule 07.04.2014

Вы также можете вызвать decorates_finders в TaskDecorator следующим образом:

class TaskDecorator < Draper::Decorator
  delegate_all
  decorates :task
  decorates_finders

  def dummy

    print "Hello World"

  end
end

Тогда вы можете получить свою украшенную модель, позвонив по телефону

Task.find(params[:id])
person Bartek Kruszczyński    schedule 15.11.2014