2011-04-15 62 views
1

我有31個以render :json => blah_blah_blah結尾的方法,這很煩人。Ruby on Rails:當格式爲json時渲染動作返回值

我的想法是設置默認響應類型和渲染操作的返回值。 第一部分已經完成:


before_filter do 
    request.format = :json unless params[:format] 
end 

,但我不能讓這個主意的第二部分東西。我試過around_filter, 但它不會返回值,試圖與default_render玩,但是卻無法獲得行動返回值:(

任何想法如何做這樣的事情?

。問候,丹尼爾

+0

哈克方式:http://pastebin.com/gHEmK2p2 – Daniel 2011-04-15 04:40:17

回答

1

嘗試class level respond_to

而且喜歡我的東西n您的控制器應該做的伎倆:

def process_action(method_name, *args) 
    self.response_body = send_action(method_name, *args).to_json 
end 

或可能:

def process_action(method_name, *args) 
    self.response_body = call(method_name, *args).to_json 
end 
+0

,有助於對付before_filter,謝謝。我仍然需要一些更好的解決方案來獲得回報。 – Daniel 2011-04-15 19:01:59

+0

好的,如果你想使用渲染方法的返回值,你需要重寫方法process_action(見abstract_controller/base.rb:149),所以它會將返回值賦給self.response_body(當前它調用action_controller/metal/implicit_render.rb:4),我的意思是,在你的控制器中應該這樣做:def process_action(method_name,* args); self.response_body = send_action(method_name,* args).to_json;結束 – Roman 2011-04-15 20:59:03

+0

非常感謝你!^_ ^ – Daniel 2011-04-16 00:49:17