您的位置:首页 > 大数据 > 人工智能

关于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 以及一些相关的问题.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: