Search code examples
middlemanmiddleman-4

Middleman sitemap.where doesn't exist


I'm trying to automatically generate a list of links to pages that have certain frontmatter in them, but every time I try to use sitemap.where(), I get a NoMethodError. For example, the following line:

 <%= sitemap.where(:title=>"about") %>

produces this output:

NoMethodError at /
undefined method `where' for #<Middleman::Sitemap::Store:0x007f9b95c7d890>

Ruby    layouts/layout.erb: in block in singleton class, line 20
Web GET localhost/

I was wondering if I accidentally messed something up in my project, so I generated a new Middleman project, but I had the same problem when I tried to use sitemap.where. Is there a solution to this or another way that I can query all of the pages?


Solution

  • The where method is part of ActiveRecord and might not work in Middleman.

    To get only those pages in the sitemap which have a particular property, you can use Ruby's select:

    <% sitemap.resources.select{|p| p.data.title == 'about'}.each do |page| %>
      <%= page.url %>
    <% end %>
    

    This code will print a (very basic) list of the URLs of pages that match your criteria.