maninred 2007-10-28 15:13
[翻译]Rails 2.0 features: Multiple views
[b][size=5]Rails 2.0特性:复合视图[/size][/b]
标签: framework, ruby, Ruby on Rails
作者: madpilot
[color=Blue]本文由Ruby中文化团队的Maninred翻译,转载请注明出处,谢谢合作。[/color]
原文链接:
[url]http://www.sitepoint.com/blogs/2007/10/26/rails-20-features-multiple-views/[/url]
下一个主要版本的Ruby on Rails(指2.0)加入了复合视图这个新特性。大约上个月底,预览版发布了,我有幸试用了一下,我想及时地概述一下一些新特点。
[b][size=4]复合视图[/size][/b]
在rails 1.2中,支持多种数据类型的respond_to块被引入,它可以轻松地支持象XML或者JSON。你需要做就是像下面这样:
[code]
def index
@stories = Story.find :all
respond to { |format|
format.html {}
format.xml {
render :xml => @stories.to_xml
}
format.json {
render :json => @stories.to_json
}
}
end
[/code]
然后在浏览器上,如果你加上了扩展文件(比如/stories/index.xml)并得到包括请求格式的内容,那么你可以在environment.rb文件的最后添加MIME::Type.register,来创建自定义的类型。
这种做法的一个问题是,基于扩展文件这种方式没有办法支持不同的HTML页面。因为MIME::Type解析器工作方式是,添加其他MIME类型为text/html的内容标识(handler)会扰乱默认的标识(handler),这意味着上面的代码会提供错误的视图。
[b][size=4]输入Mime::Type.register_alias[/size][/b]
现在你可以告诉Rails用HTML响应你希望使用的多种文件类型。就是说你想设计一个mobile版本和iPhone版本的站点,你能通过添加下面的代码到/config/initializers/mime_types.rb文件创建两个新的格式:
[code]
Mime::Type.register_alias "text/html", :iphone
Mime::Type.register_alias "text/html", :mobile
[/code]
这使下面代码可以运作:
[code]
def index
@stories = Story.find :all
respond to { |format|
format.html {}
format.xml {
render :xml => @stories.to_xml
}
format.json {
render :json => @stories.to_json
}
format.iphone {
// Serve up the iPhone version
}
format.mobile {
// Serve up the mobile version
}
}
end
[/code]
当然,必须在每个respond_to代码块用手工提交不同的版本的做法不太符合DRY原则,所以已经为所有的视图文件创建了一种新的命名惯例。相对于在上面的index.rhtml中调用视图文件,根据你要使用的方式建立三种不同的版本的视图文件更好,比如,index.html.erb, index.iphone.erb 和 index.mobile.erb。
当rails找到一个匹配的视图就使用它;当找不到时就使用默认的.html.erb或者.rhtml文件。这让你的站点方便地用不同的版本的视图提供服务。
PS:
这篇文章有drive2me大哥帮我校对,谢谢drive2me帮我耐心地讲解,和校对。
[[i] 本帖最后由 maninred 于 2007-10-28 15:19 编辑 [/i]]
drive2me 2007-10-28 22:24
希望这类的资料多一些,可能帮助大家了解Ruby 2.0的新特点!
谢谢!
drive2me 2007-10-29 20:27
哦,你的组员呢,怎么回应呀。
他们不想翻译了吗?
有好多新资料等你们翻译呢。你们翻吧,我帮你们校对,很少有人愿意帮人校对的。哈哈!
来吧,加油各位!
admin 2007-10-31 00:52
感谢maninred的辛苦工作,不过还是稍微保护一下版权较好,建立加上社区名称及本帖连接。
blackanger 2007-11-24 16:50
yudi在ftp上传了peepcode的最新pdf,rails2.0,可惜我打不开ftp了。老大赶紧加上链接
drive2me 2007-11-24 18:02
Skyover,你去连接一下吧。我就一直不能用咱们的FTP。怪呀!
playing5460 2007-12-4 09:23
[quote]原帖由 [i]drive2me[/i] 于 2007-10-29 20:27 发表 [url=http://www.ruby-lang.org.cn/forums/redirect.php?goto=findpost&pid=6789&ptid=1764][img]http://www.ruby-lang.org.cn/forums/images/common/back.gif[/img][/url]
哦,你的组员呢,怎么回应呀。
他们不想翻译了吗?
有好多新资料等你们翻译呢。你们翻吧,我帮你们校对,很少有人愿意帮人校对的。哈哈!
来吧,加油各位! [/quote]
管理员真是好人啦!
drive2me 2007-12-11 17:23
[quote]原帖由 [i]xnine[/i] 于 2007-12-11 08:13 发表 [url=http://www.ruby-lang.org.cn/forums/redirect.php?goto=findpost&pid=9179&ptid=1764][img]http://www.ruby-lang.org.cn/forums/images/common/back.gif[/img][/url]
2.0 发布了 很多新的东西 [/quote]
是,但用2.0时要注意人家通知我们要做的修改,否则运行旧版的Rails程序会出Http 500的错误。我就碰到了,在Martin的帮助下,按照他们的通知,加了一行代码在environment.rb里,就可以用了。
请大家使用时注意。呵呵!