4

我的应用程序中有一个非常基本的 API,它还有一个索引页面,允许测试/演示各种 API 功能。

由于这个索引 HTML 页面,所有函数都应该能够以 HTML(它只是重新呈现附有 Flash 消息的索引页面)或 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 状态对象似乎是件好事。

我正在考虑使用 Helper 还是通过从 JSON 布局中解析 flash 哈希的逻辑来获得更优雅的东西?

4

2 回答 2

4

您可能希望在将其to_hash呈现为 json 之前在 flash 上调用该方法。在某些版本的 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 响应渲染 flash 哈希就足够了……

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