我想在发出请求时发送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
请帮帮我
提前致谢。
答案 0 :(得分:2)
.xml
添加到网址:http://localhost:3000/forms/formlist.xml 然后只需渲染您的文件:
def formlist
respond_to do |format|
format.xml { render '/path/to/formlist.xml' }
end
end
您可以按照以下方式编写路线,而不是将.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文件。
默认情况下,操作会呈现名为:
的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