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"))
事实证明,这是行不通的。因为无论在responds_with中获得一个方法调用它。所以它一直试图调用一个json字符串抛出错误的方法 – Danny 2010-11-12 16:21:53
呃?我没有关注。你的意思是'as_json'被ActiveRecord对象调用吗?这就是它应该如何工作。 – zetetic 2010-11-12 19:33:31
似乎通过这样做,无论是在respond_with方法内部,都会在方法内部进一步处理。因此,由于您的方式先将其转换为json字符串,稍后应用于该方法的方法会失败,因为它不是对象,只是一个json字符串。看起来好像responds_with需要一个对象作为它的参数。 – Danny 2010-11-12 22:46:54