Rails2.0看起来已经离我们越来越近了,来自Rails官方blog的最新消息,作为RC(Release Candidate)版本的前奏,Rails2.0预览版已经发布。当然,预览版之后可能还会进行一些改动,但通过它我们已经可以体验到绝大部分 Rails2.0的新特性了。
在Rails2.0正式版发布之前,还会有1.2.4版本,但主要是一些Bug修改和警告信息(对不符合2.0规范的代码给出警告,方便你迁移到2.0)。
已经迫不及待了?那就赶紧试试吧!
安装
gem install rails –source http://gems.rubyonrails.org
或者通过svn:
rake rails:freeze:edge TAG=rel_2-0-0_PR
新特性
1. Action Pack: Resources
Rails2.0对REST的支持进行了许多改进,包括:
- 使用people/1/edit代替那个丑陋的people/1;edit
- 增加namespace支持:
- 同时还有一个rake routes任务可以用来察看所有命名路由。
- 所有resource controller默认都将采用复数形式,因此,一个资源可以只使用一个controller映射到多个上下文中,比如下面这样:
map.namespace(:admin) do |admin|
admin.resources :products,
:collection => { :inventory => :get },
:member => { :duplicate => :post },
:has_many => [ :tags, :images, :variants ]
end
这将产生如inventory_admin_products_url和admin_products_tags_url的命名路由
# /avatars/45 => AvatarsController#show
map.resources :avatars
# /people/5/avatar => AvatarsController#show
map.resources :people, :has_one => :avatar
2. Action Pack: Multiview
尽管已经有了respond_to,但是Rails2.0又更进了一步,将模板从模板引擎中独立了出来,show.rhtml现在成了 show.html.erb,它默认响应format.html的请求,show.csv.erb则响应text/csv类型的请求,它们都使用默认的 erb模板引擎,下面是一些模板命名的例子及说明:
- show.erb,针对所有MIME类型使用相同的模板
- index.atom.builder,使用Builder格式,也就是以前的rxml格式,它负责相应application/atom+xml格式请求
- edit.iphone.haml,使用haml引擎来渲染自定义的MIME::IPHONE类型
既然说到了iphone,我们就深入一下,Rails2.0同样对添加新的仅用于内部的MIME类型进行了简化,就以上面的iphone haml为例:
# should go in config/initializers/mime_types.rb
Mime.register_alias "text/html", :iphone
class ApplicationController < ActionController::Base
before_filter :adjust_format_for_iphone
private
def adjust_format_for_iphone
if request.env["HTTP_USER_AGENT"] && request.env["HTTP_USER_AGENT"][/(iPhone|iPod)/]
request.format = :iphone
end
end
end
class PostsController < ApplicationController
def index
respond_to do |format|
format.html # renders index.html.erb
format.iphone # renders index.iphone.erb
end
end
end
Rails2.0默认为每个应用创建了一个config/initializers/mime_types.rb文件,你可以在这里定义你自己的MIME类型。
国庆期间,今天就先到这里了,更多2.0新特性介绍,明天继续,当然你也可以直接查看原文。

