因此,Edge Rails 依然在沿正确的方向前进。一直有一些新颖而有趣的功能修复、更改和重构。让我们来看看自上次发帖 (我知道已经有一段时间了,抱歉!) 以来加入的部分功能。
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_for
的API 更改:第三个参数(即可选 CSS 前缀)现在还将 影响生成的 CSS 类。此前缀现在将附加到生成的元素的 CLASS
属性。
<%= content_tag_for(:li, @post, :published) %>
# => <li id="published_post_123" class="published_post">...</li>
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 社区的最新消息。
照片:布莱恩·泰勒的 钟楼