Rails TemplateMissing发生异常时

时间:2012-06-16 03:58:07

标签: 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 => { :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而是告诉我“模板丢失”。我的语法有问题吗?

2 个答案:

答案 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