2008年12月26日,星期五

本周 Edge Rails 动态

发布者 Mike Gunderloy

2008年12月20日至2008年12月26日版

Rails近期最大的变化尚未体现在edge Rails中:我当然是指Merb与Rails 3的合并。仓库中有一个3-0-unstable分支,但它尚未开始与主开发线分叉。目前我将继续关注将被发布为Rails 2.3的master分支。

Rails 2.3仍在稳步推进。本周团队完成了39次提交,尽管有人休假。其中许多是小的bug修复,但以下是一些您可能想关注的新开发内容。

统一渲染

ActionController::Base#render在决定渲染什么方面变得更加智能。您可以直接将内容传递给它,并期望得到正确的结果。如果您使用的是Rails 2.2,通常需要为render提供显式信息。


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)仍然需要显式选项。

提交 提交
提交
提交

ActiveRecord修复

对ActiveRecord进行了一些修复,解决了关联的失败情况。一个修复处理了某些has_many :through关联中的表名引用——如果表名包含SQL关键字,那么在Rails 2.2中您无法在这样的关联中使用它。提交

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


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

这在Rails 2.1中有效,在Rails 2.2中失败,现在在Rails 2.3中将再次有效(如果您在Rails 2.2中遇到此问题,可以使用字符串而不是哈希来指定条件)。提交

调用Model#last的一些副作用(它会改变同一范围内其他finders的顺序)已被移除。提交

日期选择助手提示

通过此补丁,您可以为各种日期选择助手(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'})

提交

杂项

dbconsole脚本现在允许您使用全数字密码而不崩溃。提交

您现在可以使用符号作为send_filesend_data:type选项,例如:send_file("fabulous.png", :type => :png)提交

如果您使用的是Active Support delegates,新的:allow_nil选项允许在目标对象为nil时返回nil而不是引发异常。提交

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