2011-04-15 81 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