关于Rails中显示xml文件的一些问题
2009-02-23 23:35
176 查看
-
假设有一个控制器名为a,其中定义了一个名为b的action.显然如果在浏览器中键入.../a/b,则会直渲染views中的b.rhtml.
现希望通过某种方法(此处以键入.../a/b/xml为例)来获得xml文件内容,该如何办呢?
首先在views中新建一个b.rxml文件.
接着在a_controller中的b action中加入如下代码:
1respond_to do |format| do
2format.html
3format.xml
4end
5
最后,我们需要在.../config/routes.rb中加入:
1map.connect ':controller/:action/:format'
使得.../a/b/xml可以生效
通过以上三步,照理说应该是可以在需要xml时获得相应的文件信息,但是我在这个过程中碰到了一些问题:
1.在a_controller中有layout或者.../app/views/layout中存在a.rhtml的渲染文件.在这种情况下,显示xml 时会加入渲染,导致xml文件不能正常显示.
此时,我们需将format.xml修改为format.xml{:action => "b.xml", :layout => false}这样,就在显示b.xml时不加载.../app/views/layout/a.rhtml,以达到正常显示b.xml的目的
2.在.../config/routes.rb中 若
1map.connect ':controller/:action/:format'
语句前有一句
1map.connect ':controller/:action/:id'
则若输入.../a/b/xml会使得 :id => xml,造成错误.此时需要将 :id正则,使其仅能代表数字,当接受的内容不是数字时便尝试匹配
1map.connect ':controller/:action/:format'
于是可将
1map.connect ':controller/:action/:id'
改为
1map.connect ':controller/:action/:id',:id=>/\d+/
即可
3.解决了上述两个问题,我们急切的想在浏览器中键入..../a/b/xml尝试一下,事实表明我们前面的作为是完全正确的,xml文件被很好的显示出来.
但是,如果键入.../a或者.../a/b这样的网址,会显示错误.这是为什么呢?为什么原来不会出错呢?
原因就在于:
1map.connect ':controller/:action/:id'
被改为了
1map.connect ':controller/:action/:id',:id=>/\d+/
原先如果输入.../a或者.../a/b时,由于没有对:id做限定,所以:id可以为空.
但是现在由于将:id 正则限定为数字,则在没有:id的前提下无法在routes.rb中找到相应的默认路径,于是便出现了错误.
解决的方法是:我们在routes.rb的最后加入一行
1map.connect ':controller/:action'
这就是所谓的"最终默认路径方法",当之前的所有路径方法都无法匹配时,便来匹配这个方法.
这样,基本上便解决了需要获取xml 以及一些相关的问题.
假设有一个控制器名为a,其中定义了一个名为b的action.显然如果在浏览器中键入.../a/b,则会直渲染views中的b.rhtml.
现希望通过某种方法(此处以键入.../a/b/xml为例)来获得xml文件内容,该如何办呢?
首先在views中新建一个b.rxml文件.
接着在a_controller中的b action中加入如下代码:
1respond_to do |format| do
2format.html
3format.xml
4end
5
最后,我们需要在.../config/routes.rb中加入:
1map.connect ':controller/:action/:format'
使得.../a/b/xml可以生效
通过以上三步,照理说应该是可以在需要xml时获得相应的文件信息,但是我在这个过程中碰到了一些问题:
1.在a_controller中有layout或者.../app/views/layout中存在a.rhtml的渲染文件.在这种情况下,显示xml 时会加入渲染,导致xml文件不能正常显示.
此时,我们需将format.xml修改为format.xml{:action => "b.xml", :layout => false}这样,就在显示b.xml时不加载.../app/views/layout/a.rhtml,以达到正常显示b.xml的目的
2.在.../config/routes.rb中 若
1map.connect ':controller/:action/:format'
语句前有一句
1map.connect ':controller/:action/:id'
则若输入.../a/b/xml会使得 :id => xml,造成错误.此时需要将 :id正则,使其仅能代表数字,当接受的内容不是数字时便尝试匹配
1map.connect ':controller/:action/:format'
于是可将
1map.connect ':controller/:action/:id'
改为
1map.connect ':controller/:action/:id',:id=>/\d+/
即可
3.解决了上述两个问题,我们急切的想在浏览器中键入..../a/b/xml尝试一下,事实表明我们前面的作为是完全正确的,xml文件被很好的显示出来.
但是,如果键入.../a或者.../a/b这样的网址,会显示错误.这是为什么呢?为什么原来不会出错呢?
原因就在于:
1map.connect ':controller/:action/:id'
被改为了
1map.connect ':controller/:action/:id',:id=>/\d+/
原先如果输入.../a或者.../a/b时,由于没有对:id做限定,所以:id可以为空.
但是现在由于将:id 正则限定为数字,则在没有:id的前提下无法在routes.rb中找到相应的默认路径,于是便出现了错误.
解决的方法是:我们在routes.rb的最后加入一行
1map.connect ':controller/:action'
这就是所谓的"最终默认路径方法",当之前的所有路径方法都无法匹配时,便来匹配这个方法.
这样,基本上便解决了需要获取xml 以及一些相关的问题.
相关文章推荐
- 关于网页显示乱码问题的一些个人见解(PHP、JSP...)
- 关于前端JSP显示的一些问题
- CurrentCulture and UICulture解决关于全球的的日期格式都能插入数据库和一些如果¥,$的正确显示问题...
- 关于Android ActionBar 一直显示overflow的一些问题
- 关于在iframe嵌套子页,子页面页面过期后,一些链接的登录框在子页面显示的问题
- 关于6位数码管动态扫描显示程序的一些问题
- 关于Django显示时间你应该知道的一些问题
- 关于双屏显示的一些问题解释
- 最近在看一些关于字符集的文章,什么iso8859-1 unicode utf8 gb2312,突然想起在linux终端上显示汉字的问题.
- 关于ajaxfileupload.js一些问题和上传图片就立即显示图片功能
- 关于android视频播放显示区域不正常的问题,一些处理方法
- 关于tomcat作为服务器 URL访问的一些问题
- 关于UIImageView的显示问题——居中显示或者截取图片的中间部分显示
- 关于Spark关注的一些问题
- 关于自动化的一些问题
- 关于渐变窗口的右下角显示问题
- 关于linux 的远程连接操作,开机启动到命令行,及securecrt中文显示的一些设置。
- 关于Installshield里一些常见问题的解答—艾泽拉斯之海洋女神出品
- 关于代理服务器藏IP的一些问题(高手免看)
- C语言—关于自增( a++和 ++a )的一些问题