Rails的respond_with不输出其余呼叫

问题描述:

我试图与使用respond_with方法轨的简单REST API的状态,但它并不想输出例如任何类型的状态消息Rails的respond_with不输出其余呼叫

,我希望它不仅能够返回一个get call的json,而且还能够有一个ok状态。当帖子或删除工作/失败时也是如此。

几个教程建议使用额外的:状态参数,但它们似乎不会影响输出。

def index 
    @conns = Connection.all 
    respond_with(@conns, :status => :ok) 
    end 

这返回一样的东西,如果:status =>:ok不存在。

任何想法??

谢谢!

这是因为它会隐式返回:status => :ok,当反应是好的,我想这是:)

尝试用另一种状态代码,就像

:status => :not_found 

在轨道上引导的官方红宝石有一个full list of status codes

:status => :ok设置HTTP标头的状态码,即它与:status => 200相同。如果你想添加一些东西给响应主体,你需要明确地添加它,例如,

respond_with({:conns => @conns, :status => :success}.to_json)

编辑

好了,这是行不通的。如果你不需要任何东西,但JSON回应,你可以只使用好老render

render :json => { :conns => @conns, :status => :success } 

如果你要包容多种响应类型与明亮而有光泽的新respond_with方法,你可以做一个类它响应as_json

class JsonResponse 
    def initialize(data,status) 
    @data = data 
    @status = status 
    end 
    def as_json(options={}) 
    { 
    :data => @data, 
    :status => @status 
    } 
    end 
end 

然后调用它像这样:

@conns = Connection.all 
respond_with(JsonResponse.new(@conns,"success")) 
+0

事实证明,这是行不通的。因为无论在responds_with中获得一个方法调用它。所以它一直试图调用一个json字符串抛出错误的方法 – Danny 2010-11-12 16:21:53

+0

呃?我没有关注。你的意思是'as_json'被ActiveRecord对象调用吗?这就是它应该如何工作。 – zetetic 2010-11-12 19:33:31

+0

似乎通过这样做,无论是在respond_with方法内部,都会在方法内部进一步处理。因此,由于您的方式先将其转换为json字符串,稍后应用于该方法的方法会失败,因为它不是对象,只是一个json字符串。看起来好像responds_with需要一个对象作为它的参数。 – Danny 2010-11-12 22:46:54