White Space


rails 3 beta 3, error_messages and dynamic_form plugin

Text

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 行代码了。这一点让我有点小小不爽,不过还好并没有增加什么复杂程度,如下图:

error_message

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

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 刀。



April 15, 2010, 11:24am

invalid?

Text

在 rails 2.x 中,在写单元测试时,一个 model 是否通过验证可使用 invalid? 这个方法,如:

assert product.errors.invalid?(:title)

不过这种方式在 rails 3 中已经不支持了,使用 any? 代替,上面的代码要改成:

assert product.errors[:title].any?



April 04, 2010, 10:46am

Text

刚在写 rails 的单元测试时,显示了个警告:

DEPRECATION WARNING: railtie_name is deprecated and has no effect. (called from /Users/userName/.bundle/ruby/1.8/gems/will_paginate-3.0.pre/lib/will_paginate/railtie.rb:6)

我翻了下 rails 3 beta2 的 changelog,找到下面这条:

railtie_name and engine_name are deprecated. You can now add any object to the configuration object: config.your_plugin = {} [JK]

哈,之前没仔细看 changelog,主要是因为 will_paginate 这个插件的 3.0 pre 版没有更新。解决办法也很简单,把下面这个文件的第 6 行注释掉就行:

/Users/userName/.bundle/ruby/1.8/gems/will_paginate-3.0.pre/lib/will_paginate/railtie.rb

这是临时办法,然后就是等作者更新了。



April 03, 2010, 9:24pm

rails 3 beta2 发布

Text

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 版本,囧。



April 02, 2010, 1:13pm

在 rails3 中使用 hirb

Text

hirb 是一个增强 console 的插件, 效果如下图:

hirb

下面是未启用 hirb 的效果图:

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!



April 01, 2010, 12:43pm

rails2 与 rails3 共存

Text

在安装 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!



March 31, 2010, 7:54pm