0

次のコードセグメントがあります

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 で応答せず、代わりに「テンプレートがありません」と表示されることです。構文に何か問題がありますか?

4

2 に答える 2

0

エラーを理解するためのshowactionに関するこの例を検討してください

class ModelsController
.
.
  def show
    @model = Model.find(params[:id])

    respond_to do |format|
      format.html
      format.js
    end
  end
end

この場合、リクエストのタイプがhtmlの場合、慣例サーチャーによってファイル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
于 2012-06-16T04:47:05.560 に答える
0

ああ、私はformat.jsonビットを必要としないことがわかりました。なぜ、正確に?

于 2012-06-16T04:01:02.687 に答える