【发布时间】:2016-01-21 02:40:47
【问题描述】:
我正在尝试使用 Jbuilder 设置一个简单的 JSON 响应。我的控制器如下:
class Api::V1::JobsController < Api::V1::BaseController
def show
@job = Job.find(params[:id])
end
end
我这里有一个 jbuilder 模板:
views\api\v1\jobs\show.json.jbuilder
由于某种原因,在浏览器或 Postman 中加载页面时,控制器被命中,但找不到 jbuilder 模板。我得到一个:
Rendered text template (0.5ms)
Completed 404 Not Found in 298ms
如果我修改作业控制器上的显示操作并添加render json: @job,我会得到所需的输出,但它当然没有使用 jbuilder 模板。
无法弄清楚为什么它没有看到 jbuilder 模板!
如果我转到 .json url,添加了一些附加细节
Started GET "/api/v1/jobs/69407.json" for 127.0.0.1 at 2016-01-21 19:16:44 -0500
Processing by Api::V1::JobsController#show as JSON
Parameters: {"id"=>"69407"}
Job Load (18.3ms) SELECT "jobs".* FROM "jobs" WHERE "jobs"."id" = $1 LIMIT 1 [["id", 69407]]
Rendered text template (0.5ms)
Completed 404 Not Found in 86ms (Views: 1.1ms | ActiveRecord: 56.4ms)
更新 - 我发现如果我专门引用它加载的 jbuilder 模板:
render 'show', formats: [:json], handlers: [:jbuilder], status: 200
另外 - 为了让上述内容正常工作,我必须将 jbuilder gem 添加到我的 gem 文件中 - 这很奇怪,因为我在 Rails 4 上应该默认包含它?
【问题讨论】:
-
Completed 404 Not Found并不表示没有找到该视图!如果 Rails 找不到视图,它将引发错误并返回 500。404 表示Job.find(params[:id])没有找到记录。检查 rails 日志。 -
但它正在找到工作,正如我所说,如果我将直接 JSON 输出添加到控制器
render json: @job,我会得到所需的 JSON 输出。 -
您能否测试访问
\api\v1\jobs\1.json,然后将rails 日志的输出添加到问题中?这样可以更轻松地给出合格的答案。 -
@cman77 你的应用程序控制器或基本控制器中有 response_to :json 吗?默认是 html,我看到一个渲染的文本模板。
-
@OlalekanSogunle duh - 我想就是这样。请回答,我将奖励赏金。