2008 年 12 月 26 日,星期五

本周的体验 Rails

由 Mike Gunderloy 发布

2008 年 12 月 20 日至 12 月 26 日发行

Rails 近期记忆中最大的改变尚未反映在体验 Rails 中:当然,我所说的就是 Merb 合并到 Rails 3 。在资料库中存在一个 3-0-unstable 分支,但它尚未开始与主要发展路线背道而驰。暂时,我将继续关注将作为 Rails 2.3 发布的 master 分支。

Rails 2.3 仍在持续处理中。尽管人们正在休假,但是该团队本周处理了 39 项提交。其中许多是小的错误修复,但是以下是一些您可能会希望在新发展中跟踪的事情。

统一呈现

ActionController::Base#render 对于决定呈现什么内容要聪明得多。您能直接抛弃一些东西并预期获得正确的结果。如果您正在使用 Rails 2.2,则常常需要提供显式信息才能呈现


render :file => '/tmp/random_file.erb'
render :template => 'other_controller/action'
render :action => 'show'

现在,在 Rails 2.3 中,您只需提供您希望呈现的内容即可


render '/tmp/random_file.erb'
render 'other_controller/action'
render 'show'
render :show

Rails 会根据待呈现内容中是否有前导斜杠、嵌套斜杠或完全没有斜杠来决定文件、模板和动作。请注意,呈现动作时,您还可以使用符号而不是字符串。其他呈现样式(:inline, :text, :update, :nothing, :json, :xml, :js)仍然需要显式选项。

commit commit
commit
commit

修复 ActiveRecord

修复 ActiveRecord 的两个问题可以清除与关联相关的故障案例。一个问题处理在一些 has_many :through 关联中引用表名称——如果表名称包含 SQL 关键字,则在 Rails 2.2 中您不能在这样的关联中使用它。 commit

另一个修复再度允许您在 has_many 关系的条件中使用哈希


has_many :orders, :conditions => {:status => 'confirmed'}

该方法在 Rails 2.1 中奏效,在 Rails 2.2 中失败,并且现在将在 Rails 2.3 中再度奏效(如果您正在 Rails 2.2 中处理该问题,则可以使用字符串而不是哈希来指定条件)。 commit

已经删除调用 Model#last 导致的一些副作用(这会在同一作用域内的其他查找器更改顺序)。 commit

Date Select Helpers 提示

通过该补丁,您可以为各种日期选择助手(date_selecttime_selectdatetime_select)提供自定义提示,您也可以使用集合选择助手。您可以提供提示字符串或哈希的各个提示字符串以用于各个组件。您还可以将 :prompt 设置为 true 以使用自定义通用提示


select_datetime(DateTime.now, :prompt => true)

select_datetime(DateTime.now, :prompt => "Choose date and time")

select_datetime(DateTime.now, :prompt => 
  {:day => 'Choose day', :month => 'Choose month', 
   :year => 'Choose year', :hour => 'Choose hour', 
   :minute => 'Choose minute'})

commit

零零碎碎

dbconsole 脚本现在可让你使用全数字密码,而不会崩溃。提交

现在你可以用符号来给 send_filesend_data:type 选项,如下所示:send_file("fabulous.png", :type => :png)提交

如果你用 Active Support 委托,新的 :allow_nil 选项可让你在目标对象为 nil 时返回 nil,而不会引发异常。 提交

你现在可为 updated_at 时间戳指定特定时间戳:cust = Customer.create(:name => "ABC Industries", :updated_at => 1.day.ago) 提交