2009 年 7 月 20 日星期一

Rails 2.3.3:更新时间戳、更快的 JSON、错误修复

David 发布

我们发布了 Ruby on Rails 版本 2.3.3。此版本修复了许多错误,并加入了一些新功能。

活动记录

  • touch 是一种便捷方法,用于仅更新记录的时间戳,不执行其他操作。此方法提取自模型在更改时“触碰”其他模型的应用,例如,在保存并销毁后,注释会更新父级的 replies_changed_at 时间戳。对整个 has_many 关联的时间戳进行设置,可以使用用于片段缓存的键,该键涵盖对父对象及其所有子对象的更改。此模式封装为 belongs_to :parent, :touch => :replies_changed_at。当子级更改时,会触碰 parent.replies_changed_at:touch => true 的默认值为 :touch => :updated_at
  • belongs_to 中的 :primary_key 选项,用于更广泛地支持旧架构以及使用单独 UUID 主键的架构: belongs_to :employee, :primary_key => 'SSN', :foreign_key => 'EMPID' 变更集

JSON

  • json 和 yajl 库解码后端。这两个后端明显快于默认的 YAML 后端。若要开始使用,请安装 json gem 并设置 ActiveSupport::JSON.backend = 'JSONGem'
  • 精简面向用户编码 API。由于 JSON 库以不同的兼容性实现 to_json,因此很难对其进行安全覆盖。大多数自定义 to_json 如下所示
    
    def to_json(*encoder_specific_args)
      { :some => "json representation" }.to_json(*encoder_specific_args)
    end
    因此,我们将面向用户 API DRY 化为更自然的
    
    def as_json(options = {})
      { :some => "json representation" }
    end
    没有丑陋的内部状态,这些状态通过对 to_json 进行重载而暴露,作为面向公众的 API 和内部生成器 API。Rails 3 显式拆分 API,因此,立即做好准备,从 to_json 切换至 as_json

其他功能

  • 向资源标签帮助程序添加 :concat 选项,以强制合并。变更集
  • 为 AR::Base#to_xml 恢复向后兼容性。变更集
  • Markdown 帮助程序从 BlueCloth 转移至 Markdown。BlueCloth 用户应将所使用的 markdown 功能升级至版本 1.0.1 或 2.0.5,以恢复兼容性。

显着错误修复

  • 修复了开发模式下流式响应导致的由类重新加载引起的错误。
  • 修复了 gem 捆绑、解包和安装系统的若干错误。
  • 设置 text_area_tag 默认转义其内容。
  • 让 filter_parameters 能正确处理数组参数。
  • postgresql 字符串引用中导致线程安全问题已修复。
  • 修复了大响应正文字符数导致的性能问题。