2012-06-24 69 views
3

我的應用程序中有一個非常基本的API,它也有一個索引頁面以允許測試/演示各種API函數。Rails DRY機制將Flash消息呈現給JSON響應

由於此索引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 

什麼會人推薦至幹這個嗎?看起來,以某種方式構建Flash哈希中的JSON狀態對象會很好。

我正在考慮使用助手還是會有一些更優雅的東西,通過從JSON佈局解析閃存散列的邏輯?

回答

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 
4

您可能希望使其爲JSON之前調用閃存的to_hash方法。在某些版本的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