我有以下代码段
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而是告诉我“模板丢失”。我的语法有问题吗?
答案 0 :(得分:0)
D'哦,事实证明我不需要format.json
位。但是,为什么呢?
答案 1 :(得分:0)
考虑一下这个关于show action来理解错误的例子
class ModelsController
.
.
def show
@model = Model.find(params[:id])
respond_to do |format|
format.html
format.js
end
end
end
在这种情况下,如果请求的类型为html,则按惯例搜索器索引文件 应用程序/视图/模型/ 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