Rails通过html响应restful输入

时间:2013-04-22 22:43:43

标签: ruby-on-rails rest

我们有一个Rails应用程序,我们通过Restful界面添加Workorders。

这是控制器代码:

# POST /workorders
# POST /workorders.json
def create
  @workorder = Workorder.new(params[:workorder])

  respond_to do |format|
    if @workorder.save
      format.html { redirect_to @workorder, notice: 'Workorder was successfully created.' }
      format.json { render json: @workorder, status: :created, location: @workorder }
  else
      format.html { render action: "new" }
      format.json { render json: @workorder.errors, status: :unprocessable_entity }
    end
  end
end

添加工作订单时,响应来自以下代码行:

format.html { redirect_to @workorder, notice: 'Workorder was successfully created.' }

其他应用获得的回报是:

<html><body>You are being <a href="http://ndeavor.ameipro.com/workorders/50">redirected</a>.</body></html>

50是新的workorder.id,但我们无法解析它。

有没有办法将workorder.id放入返回的标题中?我们需要发送数据的应用程序来了解新的workorder.id是什么。

此外,有没有办法知道请求来自其他应用程序而不是在Rails ui中创建的新工作订单。

感谢您的帮助!!

更新1

请为我澄清一些关于REST的内容。如果restful输入是json,那么控制器用json回复?如果输入是html,控制器可以用json还是仅用html响应?

当我使用RestClient进行测试时,是否有人将此url转换为json输入或添加要求json响应的内容?

http://localhost:5000/types?type[id]=318&type[typecode]=test4 

1 个答案:

答案 0 :(得分:0)

response.headers['ETag'] = @workorder.id可能有用。

但更好的方法是发送json并让客户端解析,而不是试图从HTML中删除数据。

查看Mule的documentation,看起来您应该能够像这样设置接受标头:

props.put("Accept", "application/json");

rails应用将以format.json阻止响应。

或者,您可以通过从render :json块中调出respond_to来使其始终响应json:

def create
  @workorder = Workorder.new(params[:workorder])
  if @workorder.save
    render json: @workorder, status: :created, location: @workorder
  else
    render json: @workorder.errors, status: :unprocessable_entity
  end
end