4

私のアプリには非常に基本的なAPIがあり、さまざまなAPI関数のテスト/デモンストレーションを可能にするインデックスページもあります。

このインデックスHTMLページにより、すべての関数はHTML(フラッシュメッセージが添付されたインデックスページを再レンダリングするだけ)またはJSON(単純なステータス/メッセージオブジェクトを返すだけ)のいずれかで応答できる必要があります。

現在、各関数は次のようになっています...

def do_stuff

  if params['stuff']

    begin
      Helper.do_stuff params['stuff']
    rescue Exception => ex
      msg = ex.message
      status = 'error'

      flash[:error] = msg
    else
      msg = 'Stuff done'
      status = 'success'

      flash[:success] = msg
    end

  else
    msg = 'No stuff provided'
    status = 'error'

    flash[:error] = msg
  end

  respond_to do |format|
    format.html { render 'api/index' }
    format.json do
      render json: {:status => status, :message => msg}
    end
  end
end

これを乾かすために人々は何を勧めますか?どういうわけかフラッシュハッシュからJSONステータスオブジェクトを構築するのが良いようです。

ヘルパーを使用することを考えていますか、それともJSONレイアウトからフラッシュハッシュを解析するロジックを使用することで、よりエレガントなものがあるでしょうか?

4

2 に答える 2

4

to_hashjson としてレンダリングする前に、フラッシュでメソッドを呼び出したい場合があります。Rails の一部のバージョンでは、flash.to_json実際には JSON ハッシュを返しません。

def do_stuff
  respond_to do |format|
    format.html { redirect_to :action => 'index' }
    format.json do
      render json: flash.to_hash
    end
  end
end
于 2014-09-23T20:06:47.567 に答える
2

JSON応答のためにフラッシュハッシュを直接レンダリングするだけで十分に機能することがわかりました...

def do_stuff
  if params['stuff']

    begin
      Helper.do_stuff params['stuff']
    rescue Exception => ex
      flash[:error] = msg
    else
      flash[:success] = 'Stuff done'
    end

  else
    flash[:error] = 'No stuff provided'
  end

  respond_to do |format|
    format.html { redirect_to :action => 'index' }
    format.json do
      render json: flash
    end
  end
end
于 2012-06-24T11:59:22.357 に答える