我正在尝试使用draper gem并且看起来我设置得很好,但是,当我在我的draper方法中调用方法时,我得到一个“未定义的方法错误”这是我到目前为止所做的。
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>
任何想法,出了什么问题?
答案 0 :(得分:0)
我通过替换你的:
解决了这个问题 TaskDecorator.find_by(:id => params[:id])
使用:
Task.find(params[:id]).decorate
(编辑:没有足够的声誉来评论原始问题所以原来的答案是询问OP是否找到了解决方案。现在编辑以包含我找到的解决方案。不可否认是一个旧帖子但是留下这个以防任何人否则会遇到同样的问题。)
答案 1 :(得分:0)
您也可以在decorates_finders
中拨打TaskDecorator
,如下所示:
class TaskDecorator < Draper::Decorator
delegate_all
decorates :task
decorates_finders
def dummy
print "Hello World"
end
end
然后你可以通过调用
获得你的装饰模型Task.find(params[:id])