Archive

Archive for the ‘Ruby’ Category

一份未使用的rails ppt

June 23rd, 2008 Sparkle 1 comment

去年受朋友所托,准备了一份在广州BEA user group演讲的rails ppt
可惜后来user group搁浅…

点击下面的链接下载
[download id="1"]

ppt是去年11月准备的,并未完全完成

Categories: Ruby Tags: , ,

Ruby/Rails RSS

March 10th, 2007 Sparkle 4 comments

用google搜索ruby制作rss的办法,搜了很久都找不到,这些年头,rss已经是很hot的字眼了,所以搜到了一堆提供rss的ruby网站,FT,我要找的是ruby怎么制作rss并且在rails中输出啊。后来终于知道怎么编写了,因此想把代码留下来造福大家,但是估计大家是不可能通过google搜索到这篇文章的了,看看有无有缘人能忽忽来到这里。

首先,我要说的是另一个解决方案,因为我想typo这个著名的blog程序里面应该会有rss输出的代码,于是下来看看。一看,typo果然聪明,因为rss本质是一个xml,所以typo就在controller里把需要的内容load出来,然后通过.rxml里面的xmlbuilder来自己一个一个写出来。呃⋯⋯这样太偏门了吧。

接着下来就是我要介绍的方法。如果你还在网上寻找ruby处理rss的lib的话,看到这篇文章你就不用再去找了,因为Ruby本身就内置了rss的解释和输出的支持,并且是同时支持0.9x/1.0/2.0。

废话少来,直接上代码吧:

    def feed
    articles = Article.find :all, :order => 'post_date DESC', :limit => 10
    feed = RSS::Maker.make("2.0") do |maker|
      maker.channel.title = "Gang of Technology"
      maker.channel.description = "Gang of Technology site"
      maker.channel.link = "http://up-u.com"
 
      maker.items.do_sort = true
 
      articles.each do |article|
        item = maker.items.new_item
        item.link = "http://up-u.com/archives/#{article.id}"
        item.title = article.title
        item.date = article.post_date
        item.description = Maruku.new(article.content).to_html
      end
    end
    send_data feed.to_s, :type => "application/rss+xml", :disposition => 'inline'
    end

这是本网站的rss输出的真实代码,如果你熟悉rails的话,你一定能看得懂。不过我还是来稍稍点评一下,跟rss没什么关系的我就不说了:

1. 首先是得require ‘rss/maker’一下。
2. make(“2.0″)的2.0是你要输出的rss的版本,支持的值有0.9、1.0、2.0。至于为什么用2.0,因为2.0是0.9的新版本,而其实1.0是另一家的,这个你得好好去搜一下它们的历史。
3. maker.channel的title、description、link是三个必填的值,但是其实按照rss规范,description不是必须的,但是这里不填的话,maker会报错。
4. maker.items.do_sort = true的意思是按照item的时间排一下序,不过其实我select出来的时候已经排好序了,其实要不要没有关系。
5. 接下来就是item的生成了,调用item = maker.items.new_item
6. rss规范里面item有好多个值,不过我这里只选了四个,其实只有link和title是必须的,date最好也输出,不然rss reader会把所有文章都当成是today,description我把全文输出了,因为我就是喜欢用rss reader看全文的人。
7. 跟着就是rails的内容了,怎么把它发送出去呢,send_data就行了,这里需要注意的是send_data其实是接受string,但实际上你不传string也行,但是有不会想java那样自动调用toString一把,所以我们得显式转,不然会报错,我觉得是rails的设计问题,另外就是得指定mine type,至于:disposition => ‘inline’,因为send_data的默认就是会强制浏览器下载,这个得改一下。
8. Maruku是什么?这个跟本次主题没有关系啦,想知道就看[这里](http://rubylib.cn/maruku-27)吧。

Categories: Ruby Tags: ,