2010-11-01 8 views
2

J'ai ajouté /views/sitemap/index.xml et je veux l'afficher quand je vais à l'URL appropriée.Comment rendre sitemap.xml dans l'application rails

class SitemapController < ApplicationController 

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

end 

Et routes.rb

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

utilisant Rails 3

Quand je vais à mydomain.com/sitemap/ Je viens d'obtenir une page blanche. Des idées?

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> 

Répondre

1

Le problème est que vous utilisez votre action index pour rendre xml et il Render « index.xml » fichier pas « sitemap.xml » qui est ce que vous avez créé votre point de vue

Bien que vos itinéraires sont corrects, vous utilisez le mauvais nom de fichier dans les vues

Essayez de renommer le fichier sitemap.xml à index.xml (dans les vues/dossier plan du site)

Si vous définissez les routes de nom, vous devez définir: le format avec elle

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

il permettra de recueillir votre format à partir de là. vous pouvez également définir un format par défaut dans les routes

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

Oh, mon erreur dans le poste. J'ai corrigé cela et toujours pas de chance. – 99miles

+0

pouvez-vous coller le contenu de votre fichier index.xml? –

+0

a ajouté la à la question d'origine – 99miles

0

Je peux me tromper, mais je vois 2 raisons:

  1. action index ne fait réellement rien à en juger par cet exemple de code, il répond juste de retour avec aucune information. Vous avez besoin de rendre votre objet en tant que xml - si vous n'avez pas de rails, vous ne voulez pas que xml soit utilisé - il le traite comme une autre extension de fichier. Il vous permet en fait de faire des petits trucs - comme d'envoyer json à une requête xml (tu ne sais pas pourquoi quelqu'un essaye de le faire). Une application utile est que vous pouvez faire en sorte que les rails envoient un rendu personnalisé d'un objet à un format commun ou rendent des données régulières dans un format commun pour une extension inhabituelle (nous avions un client qui voulait des données csv pour une requête .dat)

Voici un court exemple, d'un contrôleur de la maison de l'échantillon:

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 

cela renvoie cet objet comme xml:

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

le montre encore dans la sortie "Traitement par SitemapController # index en HTML ", donc il est toujours dans format.html. Je mets "format.html {render: xml => @m}" mais ça ne marche pas non plus – 99miles

+0

C'est parce que votre navigateur envoie l'en-tête 'Accepter' avec du texte/html. Si vous essayez de le récupérer avec wget -H 'Accept: text/xml', alors vous devriez obtenir la version xml. Dans l'ensemble, vous pouvez omettre le code HTML s'il n'est pas utilisé et répondre de manière inconditionnelle avec xml. – Roman

Questions connexes