2009 年 10 月 12 日,星期一

Edge Rails 中的新内容

Nathaniel Bibler 发帖

因此,Edge Rails 依然在沿正确的方向前进。一直有一些新颖而有趣的功能修复、更改和重构。让我们来看看自上次发帖 (我知道已经有一段时间了,抱歉!) 以来加入的部分功能。

ActionView 和帮助程序

XSS 转义现在 默认启用。这意味着如果您希望明确输出 HTML 到您的视图,则可能必须将它标记为 html_safe! 然后才能发送它。

<%= 'my <a href="http://www.rubyonrails.org">safe</a> string'.html_safe! %>

许多内置的帮助程序已针对此更改进行了更新,如果您发现 Rails 帮助程序由于错误导致错误地清理数据,则应该创建新的工单。

distance_of_time_in_words 增加了“超过”、“大约”和“接近”关键字,感谢 Jay Pignata 和 John Trupiano。这在估算经过时间量时为您提供了更多级别的信息。因此,它现在不仅能够报告“2 年前”,还可以报告“接近 2 年前”、“大约 2 年前”和“超过 2 年前”,具体取决于接近 2 年前的程度。

assert_equal "almost 2 years",  distance_of_time_in_words(from, to + 2.years - 3.months + 1.day)
assert_equal "about 2 years",   distance_of_time_in_words(from, to + 2.years + 3.months - 1.day)
assert_equal "over 2 years",    distance_of_time_in_words(from, to + 2.years + 3.months + 1.day)
assert_equal "over 2 years",    distance_of_time_in_words(from, to + 2.years + 9.months - 1.day)
assert_equal "almost 3 years",  distance_of_time_in_words(from, to + 2.years + 9.months + 1.day)

HTML 表单帮助程序 fields_for 通常用于嵌套其他模型表单,现在允许使用 明确集合,感谢 Andrew France。因此,不应该包含所有 blog.posts,例如,而只应该显示已发布的 blog.posts。或者

<% form_for @person, :url => { :action => "update" } do |person_form| %>
  ...
  <% person_form.fields_for :projects, @active_projects do |project_fields| %>
    Name: <%= project_fields.text_field :name %>
  <% end %>
<% end %>

针对 content_tag_forAPI 更改:第三个参数(即可选 CSS 前缀)现在还将 影响生成的 CSS 类。此前缀现在将附加到生成的元素的 CLASS 属性。

<%= content_tag_for(:li, @post, :published) %>
# => <li id="published_post_123" class="published_post">...</li>

ActiveResource 和 ActiveRecord

Taryn East 将 update_attribute(s) 方法添加到 ActiveResource。这些方法的行为与我们习以为常的 ActiveRecord 方法非常相似。

现在通过包含条件的 has_one 关联构建或创建对象将会自动将那些条件 附加 到新创建的对象,感谢 Luciano Panaro。

class Blog
  has_author :commit_author, :class_name => 'Author', :conditions => {:name => "Luciano Panaro"}
end

@blog.build_commit_author
# => #<Author name: "Luciano Panaro" ... >

Pratik Naik 为 ActiveRecord's accepts_nested_attributes_for 添加了一个新选项 :limit 来处理允许的记录数量。此外,在涵盖 accepts_nested_attributes_for 时,José Valim 将 _delete 选项 重命名为 _destroy,以更好地遵循实际发生的事件。针对 _delete 暂时添加了弃用警告。

Jacob Burkhart 将 Rails 2.3 中新的 autosave 选项更新为 :autosave => false,这将禁止保存关联的对象,即使它们是 new_record?

一些内部问题

以前在将 XML 转换为哈希时,CDATA 元素可能会被忽略,现在,多亏了约翰·皮尼亚塔,Hash#from_xml 现在会 正确解析和包含 CDATA 元素 值。

乔希·皮克已将 全局异常处理 移至 ActionDispatch::Rescue。因此,现在在 Rack 中间件级别处理这一点。

最后,Yehuda Katz 和 Carl Lerche 开始着手 Rails::Application 对象,以更好地封装一些应用程序启动和配置详细信息。此外,许多 初始化 内容已经移至这个新对象。

记住,如果你希望获得这些内容和其他内容的较短音频摘要,你应该在 Envy Labs 上查看 Ruby5 播客;它将在每周二和周五发布有关 Ruby 和 Rails 社区的最新消息。

照片:布莱恩·泰勒的 钟楼