我添加了/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>
答案 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)
我可能错了,但我看到两个原因:
索引操作实际上并没有做任何事情来判断这个代码示例,它只是回复没有信息。
你需要将你的对象呈现为xml - 如果你没有rails,不知道你想要xml - 它只是把它当作另一个文件扩展名。它实际上让你做一些小动作 - 比如将json发送到xml请求(你不知道为什么有人会尝试这样做)。你有一个有用的应用是你可以让rails将一个对象的自定义渲染发送到一个通用格式,或者为一个不寻常的扩展渲染普通格式的常规数据(我们有一个客户想要一个.dat请求的csv数据)
这是一个简短的例子,来自样本家庭控制器:
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>