Rails respond_with没有输出其余呼叫的状态

Dan*_*nny 4 ruby rest ruby-on-rails ruby-on-rails-3

我试图使用respond_with方法使用rails创建一个简单的rest api,但它不想输出任何类型的状态消息

例如,我希望它不仅可以返回json以获取get调用,还可以返回ok状态.当帖子或删除工作/失败时相同.

一些教程建议使用额外的:状态参数,但它们似乎根本不影响输出.

  def index
    @conns = Connection.all
    respond_with(@conns, :status => :ok)
  end
Run Code Online (Sandbox Code Playgroud)

这将返回与if:status =>:ok不存在相同的确切内容.

有任何想法吗??

谢谢!

zet*_*tic 8

:status => :ok设置HTTP标头的状态代码,即它与...相同:status => 200.如果要向响应主体添加内容,则需要明确添加内容,例如

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

编辑

好的,所以这不起作用.如果您不需要响应除JSON之外的任何内容,您可以使用旧的render:

render :json => { :conns => @conns, :status => :success }
Run Code Online (Sandbox Code Playgroud)

如果你必须使用明亮而有光泽的新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
Run Code Online (Sandbox Code Playgroud)

然后像这样调用它:

@conns = Connection.all
respond_with(JsonResponse.new(@conns,"success"))
Run Code Online (Sandbox Code Playgroud)