2010-11-01 1 views
2

Я добавил /views/sitemap/index.xml и хочу, чтобы он отображался, когда я перехожу к соответствующему URL-адресу.Как сделать sitemap.xml в приложении rails

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> 

ответ

1

Проблема заключается в том, что вы используете ваш указательный действия для отображения XML, и это будет оказывать «index.xml» файл не «sitemap.xml», который является то, что вы создали в Ваше отношение

Пока ваши маршруты правильно, вы используете неправильное имя файл в просмотрах

Попробуйте переименовать файл sitemap.xml в Index.xml (в представлениях/папке карты сайта)

Если определить имя маршрутов, необходимо определить: формат с ним

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

это будет пикап вашего формата оттуда. Кроме того, вы можете определить формат по умолчанию в маршрутах

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

о, моя ошибка в сообщении. Я исправил это и до сих пор не повезло. – 99miles

+0

можете ли вы вставить содержимое вашего файла index.xml? –

+0

добавили его в исходный вопрос – 99miles

0

Я могу ошибаться, но я вижу 2 причины:

  1. индекс действия фактически не делать ничего, судя по этому пример кода, его просто отвечает без информации.

  2. необходимо визуализировать объект как xml - если вы не используете рельсы, не знаете, что хотите xml - он просто рассматривает его как другое расширение файла. Это на самом деле позволяет вам делать небольшие трюки - например, отправлять json в xml-запрос (я не знаю, почему кто-нибудь попытается это сделать). Одно полезное приложение состоит в том, что вы можете заставить рельсы отправлять персонализированный рендеринг объекта в общий формат или отображать обычные данные в общем формате для необычного расширения (у нас был клиент, который хотел получить данные csv для запроса .dat)

Вот небольшой пример, из образца домашнего контроллера:

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> 
+0

терминал все еще показывает это в выводе «Обработка по параметру SitemapController # как HTML », поэтому он все еще идет в format.html. Я поместил «format.html {render: xml => @m}», но это не работает – 99miles

+0

Это потому, что ваш браузер отправляет заголовок «Принять» с текстом/html. Если вы попытаетесь найти его с помощью wget -H «Accept: text/xml», вы должны получить версию xml. В общем, вы можете опустить html, если он не используется, и безоговорочно отвечать на xml. – Roman

Смежные вопросы