Immer up to date

by chrigu on Oktober 4, 2008

Ich habe gerade mein Album mit einem RSS Feed versehen und so bin ich jetzt für Abonnenten (sind wohl eher sehr wenige) bereit. Das ganze wurde unter Anleitung von:

versucht. Da nicht alles ganz so klappte und einige Anpassungen gemacht wurden hier ein weiters Howto:

Zuerst muss das Builder Gem welches einem erlaubt XML zu generieren installiert werden, sofern dies natürlich nicht schon installiert ist. Bei den anderen Tutorials schien dies der Fall zu sein.


gem install builder

Da ich ein Feed von meinen 10 neuste Fotoalben generieren will, fügte ich folgende Methode im AlbumsController ein:


 def feed
   @albums = Album.find(:all, :limit => 10, :o rder => "created_at DESC")
 end

Im views Verzeichnis erstelle ich die feed.rss.builder Datei mit folgendem Inhalt:


xml = Builder::XmlMarkup.new(:target => $stdout, :indent => 1)
xml.instruct! :x ml, :version=>"1.0"
xml.rss :version=>"2.0" do
  xml.channel do
    xml.title("Trivialview Albums")
    xml.description("Latest albums on trivialview")
    xml.link formatted_albums_url(:rss)
      for album in @albums
        xml.item do
          xml.title(album.name)
          xml.description(album.short_description)
          xml.pubDate(album.created_at.to_s(:rfc822))
          xml.link(formatted_album_url(album, :rss))
        end
     end
  end
end

Bei allen Howtos wir die erste Zeile nicht verwendet, was bei mir zu einem Fehler führte, da das xml Objekt nicht exisierte. Naja, mit dieser Instanzierung klappt es auf jeden Fall, nur bin ich mir nicht sicher ob dies einfach wegen einer korrupten Installation sein könnte.

Da das Album Model im routes.rb als Ressource definert ist muss folgender Eintrag her


map.connect 'albums/feed.:format', :controller => 'albums', :action => 'feed'
...
map.resources :albums 

und zwar wie angedeutet vor dem resources Eintrag.

Damit der Link auch im Browser erscheint, muss nur noch folgende Zeile im header der view eingefügt werden.


<%= auto_discovery_link_tag(:rss, :action => 'feed.rss') %>
 

Leave a Comment

Previous post:

Next post: