为基于Rails开发的blog增加rss输出
现在基本每一个 BLOG 都支持 RSS 阅读了,甚至很多新闻,论坛站点都支持 RSS 订阅,让我们来看看基于 Rails 开发的 BLOG 站点应该如何增加 RSS 输出呢?
假设我们已经让我们的 BLOG 使用形如:http://www.wuwx.net/blogs 的地址来浏览了,应该怎么样规划我们的站点 URL,使得加上去之后,我们的 URL 比较友好,并且还是符合 RESTFull 的呢?
使用 /blogs/rss ?还是 /rss/blogs ?都不是,我们知道,/blogs.xml 和 /blogs.html 表示对于 /blogs 的 xml 和 html 的两种不同的表现形式,而对于 rss 来说,同样是 /blogs 的一种特殊的表现形式。所以我们应该使用 /blogs.rss 这样的地址。
于是我们在控制器中使用如下代码:
def index @blog_pages, @blogs = paginate :blogs, :order => 'id DESC' respond_to do |format| format.html format.xml format.js format.rss { render :action => "feed.rxml", :layout => false } end end
我们在原来系统自动生成的控制器后面增加了一条 format 规则,是 format.rss { render :action => "feed.rxml", :layout => false },这句话的含义就是如果请求的是 /blogs.rss,也就是扩展名如果请求的是 .rss,那我们就使用 feed.rxml 来渲染,并且不使用 layout。
然后我们再编写 feed.rxml 文件,feed.rxml 文件的位置是在 /app/views/blogs/feed.rxml,最后内容如:
xml.instruct! :xml, :version=>"1.0" xml.rss(:version=>"2.0") { xml.channel { xml.title("猫言猫语") xml.link("http://www.wuwx.net") xml.description("严以律己·宽以待人·自强不息·知行和一") xml.language("zh-cn") for blog in @blogs xml.item do xml.title(blog.title) xml.description(link_to '阅读全文', blog_url(blog)) xml.pubDate(blog.created_at.rfc2822) xml.link(blog_url(blog)) xml.guid(blog_url(blog)) end end } }
然后我们再访问 http://www.wuwx.net/blogs.rss,就把 blog 的内容通过 rss 输出了。
同样,我们如果需要输出为 atom 格式,就使用 http://www.wuwx.net/blogs.atom 这样的地址,控制器内只需要增加一行 format.atom { render :action => "atom.rxml", :layout => false },然后再增加一个名为 atom.rxml 的模板文件就可以了,是不是很容易扩展,并且 URL 地址十分友好呢?

如果输入http://www.wuwx.cn/blogs.rss,会出现rails错误,找不到controller: blogs.rss
我想为我的很多controller编写一个rss模板,我不知道怎么把这个controller的参数传过去,也不知道怎么告诉format.rss我要加载哪里rss模板