问题标签 [draper]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
92 浏览

ruby-on-rails - Draper::UninferrableDecoratorError(无法推断装饰器)

我想在控制器中推断一个装饰器,所以我以正常方式生成一个装饰器(rails g 装饰器)并在控制器中推断它。但是,当我使用 Postman 进行测试时,出现错误:

Could not infer a decorator for Employers::Job.

错误信息显示我在控制器中的语法不正确(在哪里.decorate使用),我不知道我哪里出错了。

我尝试过更改书写方式并明确指定装饰器@job = Employers::JobDecorator.find(params[:id]).decorate

这是控制器的一部分:

这是一开始的装饰器:

更新 2 感谢评论中的建议,在我Employers::JobDecorator.decorate(@job)在控制器中使用后情况发生了变化,但出现了一个新错误。消息说undefined method 'attributes' for nil:NilClass,来源是以下文件中的一行代码:

#app/decorators/employer/job_decorator.rb

这是什么原因?

更新 3

按照评论的建议,在将一些装饰器更改为以下内容后,我又回到了之前的错误。

错误是“NoMethodError in Employers::JobController#show”,指向的文件是“config/initializer/active_model/serialization.rb”中的行之一(下面提取的最后一行):

更新 4

如果我更改装饰器的编写方式,结果仍然类似于“#Employers::JobDecorator:0x00007ff3cdd3f748 的未定义方法‘id’”

更新 5

我怀疑原因是@job为nil,所以我在控制器中添加了一些东西,终于解决了问题。我把它弄错了方向。