我正在尝试使用Jbuilder设置简单的JSON响应。我的控制器如下:未找到Rails4 Jbuilder模板
class Api::V1::JobsController < Api::V1::BaseController
def show
@job = Job.find(params[:id])
end
end
我这里有JBuilder的模板:
views\api\v1\jobs\show.json.jbuilder
对于加载控制器打在浏览器或邮差页面时某种原因,但JBuilder的模板未找到。我得到一个:
Rendered text template (0.5ms) Completed 404 Not Found in 298ms
如果我修改作业控制器上的表演动作,并添加一个render json: @job
我得到需要的结果,当然,它没有使用JBuilder的模板。
不知道为什么它没有看到jbuilder模板!
增加了一些细节除此之外,如果我去上传.json网址
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,默认情况下应该包含它。
'已完成404 Not Found'并不意味着没有找到该视图!如果Rails无法找到视图,则会引发错误并返回500. 404意味着'Job.find(params [:id])'没有找到记录。检查导轨日志。 – max
但它找到了工作,正如我所说的,如果我向控制器添加一个直接的JSON输出'render json:@ job'我得到所需的JSON输出。 – cman77
您可以测试访问'\ api \ v1 \ jobs \ 1.json',然后将rails日志的输出添加到问题中吗?这使得给出合格答案变得更容易。 – max