找不到 Rails4 Jbuilder 模板
Rails4 Jbuilder templates not being found
我正在尝试使用 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" = 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哪个应该默认包含它?
我认为您可能必须在您的应用程序控制器或基本控制器中放置一个 respond_to :json
。默认值为 html,我看到呈现的文本模板。
扩展@OlalekanSogunle 的回答。您可以通过几种不同的方式设置您希望操作如何响应。
在路由中 (这将默认将实际路由设置为 header 请求格式 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
在控制器中作为 class 默认值:
class Api::V1::JobsController < Api::V1::BaseController
respond_to :json
def show
@job = Job.find(params[:id])
end
end
在控制器中作为默认操作:
class Api::V1::JobsController < Api::V1::BaseController
def show
@job = Job.find(params[:id])
respond_to do |format|
format.json
end
end
end
我正在尝试使用 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" = 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哪个应该默认包含它?
我认为您可能必须在您的应用程序控制器或基本控制器中放置一个 respond_to :json
。默认值为 html,我看到呈现的文本模板。
扩展@OlalekanSogunle 的回答。您可以通过几种不同的方式设置您希望操作如何响应。
在路由中 (这将默认将实际路由设置为 header 请求格式 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
在控制器中作为 class 默认值:
class Api::V1::JobsController < Api::V1::BaseController
respond_to :json
def show
@job = Job.find(params[:id])
end
end
在控制器中作为默认操作:
class Api::V1::JobsController < Api::V1::BaseController
def show
@job = Job.find(params[:id])
respond_to do |format|
format.json
end
end
end