在get request ruby​​上发送xml文件

时间:2015-02-26 08:06:38

标签: ruby-on-rails ruby xml http

我想在发出请求时发送XML文件

这是我的xml文件

<forms>
<form url="https://opendatakit.appspot.com/formXml?formId=CascadingSelect">Cascading Select Form</form>
<form url="https://opendatakit.appspot.com/formXml?formId=widgets">Widgets</form>
</forms>

这是我的网址

http://localhost:3000/forms/formlist

这是我的ruby控制器发送xml

respond_to :xml
def formlist
   respond_to do |format|
     format.xml {//what should I write here to send formlist.xml}
   end
end

这里是route.rb

get 'forms/formlist' => 'forms#formlist'

但它没有发送xml文件,错误代码为422

请帮帮我

提前致谢。

2 个答案:

答案 0 :(得分:2)

  1. .xml添加到网址:http://localhost:3000/forms/formlist.xml
  2. 然后只需渲染您的文件:

    def formlist respond_to do |format| format.xml { render '/path/to/formlist.xml' } end end

  3. 您可以按照以下方式编写路线,而不是将.xml添加到网址:

    get 'forms/formlist' => 'forms#formlist', defaults: { format: 'xml' }

    所以每个没有MIME类型的请求都将被解释为xml request

答案 1 :(得分:1)

respond_to do |format|
  format.xml {//what should I write here to send formlist.xml}
end

如果您的xml文件名称正确,则不必在大括号之间写任何内容。

路线:

首先,您的路线可以简单:

get "forms/formlist"

默认情况下,rails假定路由的格式为controller/action

行动:

您的formlist()操作可能如下所示:

 def formlist
    respond_to :xml  
 end

respond_to行是以下的快捷方式:

respond_to do |format|
   format.xml {}
end

在任何一种情况下,您的操作都只会响应对xml文件的请求;对其他文件类型的请求将产生UnknownFormat错误。

视图:

然后在此处创建xml文件:

app/views/forms_controller/formlist.xml.erb

如果您的xml文件中没有任何ruby代码,则可以省略.erb扩展名。

网址:

要请求xml文件,您可以使用url:

http://localhost:3000/forms/formlist

...并在请求中指定以下标头:

Accept: text/xml

例如:

curl --header 'Accept: text/xml' http://localhost:3000/forms/formlist

或者,正如rubykid发布的那样,您可以使用网址:

http://localhost:3000/forms/formlist.xml

例如:

 curl http://localhost:3000/forms/formlist.xml

在任何一种情况下,rails都知道请求是在索取xml文件。

的respond_to():

默认情况下,操作会呈现名为:

的html文件
app/views/some_controller/action_name.html.erb

可以使用respond_to()和/或render()更改默认呈现。

例如,respond_to :xml将呈现文件:

app/views/some_controller/action_name.xml.erb

...在你的情况下将是:

app/views/forms_controller/formslist.xml.erb

如果你想渲染一个不同的xml文件,那么你是否只需要使用respond_to()的块形式并在大括号内写一些东西:

respond_to do |format|
   format.xml {render ...}
end

在这种情况下,请参阅Rails Guide on rendering了解如何使用render()。

为了完整起见,快捷方式:

respond_to :xml, :json

......相当于:

respond to do |format|
  format.xml {}
  format.json {}
end

另一种选择:

如果xml文件是静态文件,即其内容永远不会更改,并且您希望将其公开提供给任何人,则可以将其放在public/文件夹中。例如,如果您命名xml文件:

public/data.xml

...然后任何人都可以使用url:

请求xml文件
http://localhost:3000/data.xml