Ruby on rails 发生异常时Rails TemplateMissing
我有以下代码段Ruby on rails 发生异常时Rails TemplateMissing,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有以下代码段 def range respond_to do |format| if params[:start] && params[:end] begin dstart = Time.parse(params[:start]) dend = Time.parse(params[:end]) rescue => e format.json { render :json => { :
def range
respond_to do |format|
if params[:start] && params[:end]
begin
dstart = Time.parse(params[:start])
dend = Time.parse(params[:end])
rescue => e
format.json { render :json => { :status => :unprocessable_entity, :error => e.message }} and return
end
...
它的工作原理非常好,并且可以放在底部的东西上
...
format.json { render :json => { :status => :ok, :posts => @res.to_json(:only => [:date, :content, :user_id]) } }
else
format.json { render :json => { :status => :unprocessable_entity, :error => "must have a _start_ and _end_ date" } }
...
问题是当出现异常并调用
rescue
部分时,Rails不会用json响应,而是告诉我“模板丢失”。我的语法有问题吗?D'oh,原来我不需要格式.json
位。但是,确切的原因是什么?考虑一下这个关于显示操作的示例,以了解错误
class ModelsController
.
.
def show
@model = Model.find(params[:id])
respond_to do |format|
format.html
format.js
end
end
end
在这种情况下,如果请求的类型是html,那么rails按约定搜索一个文件
app/views/models/show.html.erb
但是如果请求的类型是js,那么rails将搜索app/views/models/show.js.erb。
如果这些文件不存在,rails将抛出模板丢失错误
因此,如果您只响应json,那么您可以这样做
respond_to do |format|
format.json do
begin
..
rescue
render :json => { }
end
end