如何在Rails 3中创建一个RSS/Atom订阅源?

52
我对Rails 3还比较陌生,我正在尝试创建RSS/Atom订阅。我知道auto_discovery_link_tag,但相关的控制器/操作应该长什么样呢?
谢谢!
2个回答

78

Auto_discovery_link_tag是一个很好的开始。通过快速的谷歌搜索,我找到了关于如何在Rails中创建RSS源的博客文章How to Create an RSS feed in Rails。让我告诉你一下你相关的控制器/操作应该是什么样子:

controllers/posts_controller.rb

def feed
    @posts = Post.all(:select => "title, author, id, content, posted_at", :order => "posted_at DESC", :limit => 20) 

    respond_to do |format|
      format.html
      format.rss { render :layout => false } #index.rss.builder
    end
end

这个文件的名称应该与控制器匹配。见下面:

views/posts/feed.rss.builder

xml.instruct! :xml, :version => "1.0" 
xml.rss :version => "2.0" do
  xml.channel do
    xml.title "Your Blog Title"
    xml.description "A blog about software and chocolate"
    xml.link posts_url

    for post in @posts
      xml.item do
        xml.title post.title
        xml.description post.content
        xml.pubDate post.posted_at.to_s(:rfc822)
        xml.link post_url(post)
        xml.guid post_url(post)
      end
    end
  end
end

这里是所有Railsy魔法发生的地方。在这里,RSS feed XML被生成并返回给HTTP。


1
谢谢Matt,很有道理,我以前从未听说过.builder文件。对于那些想知道Atom的人,我刚刚搜索了“rails atom.builder”,得到了一个非常类似的代码片段,但是是针对Atom的。(http://www.papodenerd.net/creating-atom-feeds-with-ruby-on-rails/) - simonista
2
尽管我希望你选择Atom而不是RSS,但我建议你只使用其中一个。它们代表相同的信息,并且大多数现代Feed解析库都支持两者,所以它们都可以使用 :) 请查看这些最佳实践:http://blog.superfeedr.com/Feeds/RSS/Atom/Best%20Practice/feed-publishing-best-practices/ - Julien Genestoux
Julien,我同意人们应该选择一个并坚持下去。我只是想提供相同的信息给Atom,这样在阅读本页后,有人可以很容易地选择其中任何一个。 - simonista
3
想要补充一点,你应该将 .rss.builder 文件的名称与你命名的操作(函数)相同。所以在这种情况下,它应该是 feed.rss.builder 而不是 index.rss.builder。 - simonista
最近注意到在JRuby上构建器的表现不佳,我正在调查其他选项。 - Jim Wharton
<%= auto_discovery_link_tag(:rss, "http://iblog.com") %> 这里的“http://iblog.com”链接应该指向posts#feed操作,请让我知道吗? - Raghvendra Parashar

5
使用auto_discovery_link_tag:
在控制器中:
respond_to do |format|
  format.html
  format.atom {render action: 'index', layout: false}
end

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接