Rails查询仅返回第一次结果

时间:2012-10-31 03:19:07

标签: ruby-on-rails-3

我正在开发的应用程序中遇到一个不寻常的问题。

我正在编写一个控制器/视图来生成sitemap.xml资源。通过在浏览器中查看它,我第一次测试它时效果很好。

然而,第二次,当我刷新视图时,没有返回页面结果,并且站点地图实际上是空的。

如果我对代码进行了更改。它可以像添加空行或删除它一样少,然后第一次正确生成站点地图。任何额外的刷新都是空的。

这是代码:

站点地图控制器

class SitemapController < ApplicationController
    layout nil

    def index
        @pages = Page.where(:publish => true)
        @base_url = "http://#{request.host_with_port}"
        headers['Content-Type'] = 'application/xml'
        def index
            respond_to do |format|
                format.xml
            end
        end
    end
end

这是sitemap.xml.erb

<?xml version="1.0" ?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<% @pages.each do |page| %>
  <url>
    <loc><%= "#{@base_url}/#{page.permalink}" %></loc>
    <lastmod><%= page.updated_at %></lastmod>
    <priority>0.5</priority>
  </url>
<% end unless @pages.nil? %>
</urlset>

和路线

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

奇怪的是它似乎在控制器的查询中。

@pages = Page.where(:publish => true)

在连续尝试时返回nil,但每次在应用程序的其他部分中都有类似的查询。我尝试过使用其他方法,例如Page.all和Page.find:除了问题仍然存在。

我还把它上传到了Heroku上的应用程序,想知道它是否在我的环境中,但它也发生在那里。

1 个答案:

答案 0 :(得分:3)

您的SitemapController#index方法正在重新定义自己。澄清问题:

def fn
  def fn
    2
  end
  1
end

fn
# => 1
fn
# => 2

尝试改为:

class SitemapController < ApplicationController
    layout nil

    def index
        @pages = Page.where(:publish => true)
        @base_url = "http://#{request.host_with_port}"
        headers['Content-Type'] = 'application/xml'
        respond_to do |format|
            format.xml
        end
    end
end

此外,sitemap_generator gem效果相当不错。