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

时间:2010-11-11 17:49:31

标签: ruby-on-rails ruby rest ruby-on-rails-3

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

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

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

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

返回与if:status =>完全相同的内容。 :好的不在那里。

任何想法??

谢谢!

2 个答案:

答案 0 :(得分:8)

: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"))

答案 1 :(得分:2)

这是因为它会隐式返回:status => :ok,当响应没问题时,我猜它是:)

尝试使用其他状态代码,例如

:status => :not_found

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