如何在rails app中呈现sitemap.xml

时间:2010-11-01 21:57:09

标签: ruby-on-rails xml sitemap

我添加了/views/sitemap/index.xml,并希望在我转到相关网址时显示。

class SitemapController < ApplicationController

  def index
    respond_to do |format|
      format.html
      format.xml
    end
  end

end

在routes.rb

  match "sitemap/" => "sitemap#index"

使用Rails 3

当我去mydomain.com/sitemap/时,我只是得到一个白页。有什么想法吗?

INDEX.XML

<?xml version="1.0" encoding="UTF-8"?>
<urlset
      xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9
            http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">

<url>
  <loc>http://www.mydomain.com/</loc>
  <changefreq>weekly</changefreq>
</url>
</urlset>

2 个答案:

答案 0 :(得分:1)

问题是您正在使用索引操作来呈现xml,它将呈现“index.xml” 文件不是“sitemap.xml”,这是您在视图中创建的

虽然您的路线正确,但您在视图中使用了错误的文件名

尝试将sitemap.xml文件重命名为index.xml(在views / sitemap文件夹中)

如果您定义名称路由,则需要定义:format with it

match "/sitemap/sitemap.[:format]", :to => "sitemap#index" 

它将从那里获取您的格式。您还可以在路径中定义默认格式

match "sitemap/sitemap.xml", :to => "sitemap#index", :defaults => {:format => :xml}

答案 1 :(得分:0)

我可能错了,但我看到两个原因:

  1. 索引操作实际上并没有做任何事情来判断这个代码示例,它只是回复没有信息。

  2. 你需要将你的对象呈现为xml - 如果你没有rails,不知道你想要xml - 它只是把它当作另一个文件扩展名。它实际上让你做一些小动作 - 比如将json发送到xml请求(你不知道为什么有人会尝试这样做)。你有一个有用的应用是你可以让rails将一个对象的自定义渲染发送到一个通用格式,或者为一个不寻常的扩展渲染普通格式的常规数据(我们有一个客户想要一个.dat请求的csv数据)

  3. 这是一个简短的例子,来自样本家庭控制器:

    class HomeController < ApplicationController
      def index
    
        @m = {
        :color => "yellow",
        :total => "20"
      }
    
        respond_to do |format|
          format.html # index.html.erb
          format.xml  { render :xml => @m}
        end
    
      end
    
    end
    

    将此对象返回为xml:

    <hash>
     <total>20</total>
     <color>yellow</color>
    </hash>