2007 年 2 月 6 日,星期二

Rails 1.2.2:SQLite3、gems、单数资源

作者 David

现在是 Rails 1.2 的另一个次要更新的时候了。这一次更新主要是由于 SQLite 在 3.3.7 和 3.3.8+ 版本之间 API 发生变化而引发的,导致 Rails 数据库适配器在各个方面都无法正常工作。不过,借助于此版本和 Jamis Buck 的 sqlite3-ruby gem 1.2.1 版,我们在所有版本的 SQLite3 上重新恢复了正常工作。

其次,我们现在依赖 RubyGems 0.9.0 及更高版本。这样将修复 require_gem 的弃用信息(新方法只是 gem),并将恢复 rake rails:freeze:gems 的正常工作。因此,在安装之前务必更新到最新的 RubyGems。这是通过“gem update —system”来完成的。

最后,我们决定在这个版本中除了上面描述的修复和其余的错误修复之外,还添加一些好东西。例如,单数资源允许您在域范围内对单例资源进行建模。常见的示例是 user.application.com/account。它现在使用以下方法进行建模

map.resource :account

…并相应地进行路由

GET /account => AccountController#show GET /account/new => AccountController#new GET /account;edit => AccountController#edit POST /account => AccountController#create PUT /account => AccountController#update DELETE /account => AccountController#destroy

请注意,控制器也是单数,而不是通常使用 map.resources 时那样的复数。

我们还带来了对 ActiveRecord 中 :conditions 的增强,它允许您传入范围并自动将它们转换为 BETWEEN 语句。比如

Student.find(:all, :conditions => { :grade => 9..12 })

…它就变成了

SELECT * FROM students WHERE grade BETWEEN 9 AND 12”

强烈建议所有运行 1.2.x 版本的人进行此升级(并提醒一下,如果您尚未升级到 Rails 1.2.x,您将无法自动获取错误修复,必须自己进行反向移植)。它是一个直接替代程序,无需对运行 1.2.× 的应用程序进行任何更改。

尽情享受吧!