找不到Rails4 Jbuilder模板

时间:2016-01-21 02:40:47

标签: ruby-on-rails jbuilder

我正在尝试使用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

由于某些原因,当在浏览器或邮递员中加载页面时,控制器被命中,但找不到jbuilder模板。我得到了:

Rendered text template (0.5ms) Completed 404 Not Found in 298ms

如果我在作业控制器上修改show动作并添加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上应默认包含它?

2 个答案:

答案 0 :(得分:3)

我认为您可能需要在应用程序控制器或基本控制器中放置respond_to :json。默认为html,我看到了一个渲染的文本模板。

答案 1 :(得分:3)

扩展@ OlalekanSogunle的答案。您可以通过几种不同的方式设置操作的响应方式。

在路线中 (这将默认设置标头请求以格式化json的实际路线)

Rails.application.routes.draw do

    namespace :api do
        namespace :v1 do
            get 'jobs/show', to: 'jobs#show', defaults: { format: :json }, as: :job
        end
    end

end

在Controller中作为类默认

class Api::V1::JobsController < Api::V1::BaseController

   respond_to :json

   def show
      @job = Job.find(params[:id])
   end

end

在Controller中作为操作默认值

class Api::V1::JobsController < Api::V1::BaseController

   def show
      @job = Job.find(params[:id])

      respond_to do |format|
         format.json
      end
   end

end