Как отрендерить sitemap.xml в приложении rails - PullRequest
2 голосов
/ 02 ноября 2010

Я добавил /views/sitemap/index.xml и хочу, чтобы он отображался при переходе на соответствующий URL.

class SitemapController < ApplicationController

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

end

А в маршрутах .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 ]

1 голос
/ 02 ноября 2010

Проблема в том, что вы используете свое действие index для рендеринга xml, и оно будет отображать файл "index.xml", а не "sitemap.xml", который вы создали в своих представлениях

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

Попробуйте переименовать файл sitemap.xml в index.xml (в папке views / sitemap)

Если вы задаете маршруты имен, вам нужно определить: отформатируйте с ним

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

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

match "sitemap/sitemap.xml", :to => "sitemap#index", :defaults => {:format => :xml}
0 голосов
/ 02 ноября 2010

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

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

  2. вам нужно визуализировать ваш объект в формате xml - если вы не пользуетесь rails, не знаете, что хотите 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>
...