NetBeans 6.9 Beta 发布了,支持 rails 3
查阅 Release Notes。
Shallow Route Nesting 是 rails 2.2 增加的一个蛮有用的功能,具体的可以查看这里。
你看到下面这样的链接后是什么样的感受?
http://example.org/publishers/1/magazines/2/photos/3
因为 Shallow Route Nesting 的出现,事情就变得简单多了,只需要在你的 route 的 resources 中加上 :shallow => true 就可以了,你就可以得到下面的链接了:
http://example.org/publishers/1
http://example.org/magazines/2
http://example.org/photos/3
明显赏心悦目多了,不过刚在 rails 3 中测试这个功能时发现,竟然无效,我无语了,在网上转了圈,找到这个 Missing shallow routes in new router DSL,看的我是莫名其妙啊,似乎 dhh 和 wycats 都不知道是怎么回事,好搞笑。
近而我又发现了 Rails Routing from the Outside In 这个页面前几天改动了不少,是由 wycats 改的,他把关于 Shallow Route Nesting 的部分整个删除了,加上了这么一句话:
Resources should never be nested more than 1 level deep.
同时还推荐去阅读这篇文章,也就是推荐下面的方式:
resources :publishers do
resources :magazines
end
resources :magazines do
resources :photos
end
resources :photos
到此差不多可以确认 shallow 在 rails 3 中被去掉了,但我翻了好久的 changelog 和 commit 都没找到与此相关的内容,晕死。
不过 rails core 这么做,也是有道理的,确实符合 rails 和 resources 的哲学,相比使用 shallow,上面的代码虽然增加了不少,但明显更加的一目了然。
rails 3 beta 3 发布了,主要的更新是:
* Removed verify method in controllers. [JV]
It’s now available as a plugin at http://github.com/rails/verification
* Removed input, form, error_messages_for and error_message_on from views. [JV]
It’s now available as a plugin at http://github.com/rails/dynamic_form
熟悉的 error_messsages 和 error_messages_for 从 rails core 中移出了,这个影响还真不小,也在 rails 社区引起广泛的讨论,觉得 rails 这样做有点粗暴和强制,不过 dhh 给出了解释。
如果你现在用 scaffold 生成一些东西的话, 原来的 ”f.error_messages“ 1 行代码现在变成 12 行代码了。这一点让我有点小小不爽,不过还好并没有增加什么复杂程度,如下图:

当然你也可以用插件来实现,但我测试后发现有那么点不同,下面是对比图。
old:

new

对比很明显,使用插件的话,是可以不用改任何代码,但错误提示的文字版没有了,按我的理解,既然移出成为插件,应该保持无缝切换才对,应该和原来的保持一致吧,我不清楚这是 rails 开发团队的疏忽还是有意为之,或在未来会更新?
就我个人而言,我是支持这样改动的,我觉得原来的 error_messages 相关的 helper 和 rails core 的耦合度过高,可定制性并不是很好,其实很多人并不采用这种方式去显示错误提示,鉴于 rails 坚持的一贯原则,是相当可以理解这种改动的。
rails 3 已经发布了 3 个 beta 版了,应该不久就会推出 rc 版了,那正式版也不远了。很期待正式发布的那天,也很期待大家开始使用 rails 3 的那一刻。
另外,Agile Web Development with Rails 4th Edition, 4th Edition beta 也发布了,是专门针对 rails 3 的, 很想买, 不过有点小贵,电子版需要 24 刀。
rails 开发团队选在愚人节这天发布了 rails 3 beta2,相比 beta1 的变化的详细列表可以查看 changelog。主要的变化有以下几点:
1,new_record? and destroyed? 这两个方法被移除,使用 persisted? 代替。
这个更新对 rails 2 的项目来说影响就比较大了。
2,form_for 和 form_tag 都要加上等号了, 如 <% form_for do 现在建议写成 <%= form_for do 了, 原来的写法继续有效, 但会提出一个警告。
rails 3 beta2 无法从 beta1 直接升级, 得重新安装:
gem install rails —pre
安装好后,修改一下原来 beta1 下建的项目的 Gemfile 文件, 改一下 rails 的版本号,然后执行下 bundle 的相关操作:
bundle install
之后就按上面写的更新改一下相关地方就行了。
另外,注明一下,ruby 1.8.7 p248 和 p249 都会导致 rails 2 和 rails 3 崩溃,ruby 1.9.1 也会导致 rails 3 崩溃,官方推荐升级到 ruby 1.9.2,但 1.9.2 还是 preview 版本,囧。
hirb 是一个增强 console 的插件, 效果如下图:

下面是未启用 hirb 的效果图:
![]()
对比结果不言而喻了, 安装 hirb 也很简单:
gem install hirb
安装好后, 给 ~/.irbrc 文件加入下面几行, 使之默认启用 hirb:
require ‘rubygems’
require ‘hirb’
Hirb::View.enable
这样在 rails2 下是可以直接使用了, 不过在 rails3 下有点问题, 原因是因为 rails3 对 gem 的管理机制改了, 使用 bundle 来管理了, 所以要在 rails3 下使用, 需要在 Gemfile 文件中加入 hirb:
gem “hirb”
如此, 完成, enjoy!
在安装 rails3 之前, 先把 rails 这个指令重命名为 rails2 (如果不知道 rails 在哪, 请使用 which 命令查找) :
sudo mv /usr/bin/rails /usr/bin/rails2
然后用编辑器修改一下 rails2 里的一点点内容:
version = “>= 0”
修改为:
version = “~> 2.0”
然后开始安装 rails3:
gem install tzinfo builder i18n memcache-client rack rake rack-test erubis \ mail text-format thor bundler
gem install rack-mount -v=0.4
gem install rails —pre
如果有需要, 请加 sudo,这样就可以使用 rails demo 新建 rails3 的项目, 用 rails2 demo 新建 rails2 的项目了, enjoy!