更多内容请访问 rubyonrails.org:

Ruby on Rails 5.0 发行说明

Rails 5.0 的亮点

  • Action Cable
  • Rails API
  • Active Record 属性 API
  • 测试运行器
  • 独占使用 rails CLI 替代 Rake
  • Sprockets 3
  • Turbolinks 5
  • 要求 Ruby 2.2.2+

这些发行说明仅涵盖主要变更。要了解各种错误修复和变更,请参阅变更日志或查看 GitHub 上主 Rails 仓库中的提交列表

1. 升级到 Rails 5.0

如果您正在升级现有应用程序,最好在开始之前进行充分的测试覆盖。您还应该首先升级到 Rails 4.2(如果尚未升级),并确保您的应用程序在尝试更新到 Rails 5.0 之前仍能按预期运行。在升级 Ruby on Rails 指南中提供了升级时需要注意的事项列表。

2. 主要特性

2.1. Action Cable

Action Cable 是 Rails 5 中的一个新框架。它将 WebSockets 与您的 Rails 应用程序的其他部分无缝集成。

Action Cable 允许以与您的 Rails 应用程序其他部分相同的风格和形式用 Ruby 编写实时功能,同时仍然保持高性能和可扩展性。它是一个全栈产品,提供客户端 JavaScript 框架和服务器端 Ruby 框架。您可以使用 Active Record 或您选择的 ORM 编写的完整领域模型。

有关更多信息,请参阅Action Cable 概述指南。

2.2. API 应用程序

Rails 现在可以用于创建精简的仅 API 应用程序。这对于创建和提供类似于 XGitHub API 的 API 很有用,这些 API 可用于面向公众以及自定义应用程序。

您可以使用以下命令生成一个新的 API Rails 应用程序

$ rails new my_api --api

这将主要完成三件事

  • 配置您的应用程序以比正常情况下更有限的一组中间件启动。具体来说,默认情况下它不会包含任何主要用于浏览器应用程序(如 cookie 支持)的中间件。
  • 使 ApplicationController 继承自 ActionController::API 而不是 ActionController::Base。与中间件一样,这将省略任何主要由浏览器应用程序使用的 Action Controller 模块。
  • 配置生成器在生成新资源时跳过生成视图、帮助程序和资产。

该应用程序为 API 提供了基础,然后可以根据应用程序的需求配置以引入功能

有关更多信息,请参阅将 Rails 用于仅 API 应用程序指南。

2.3. Active Record 属性 API

定义模型上具有类型的属性。如果需要,它将覆盖现有属性的类型。这允许控制在分配给模型时值如何转换为 SQL 以及从 SQL 转换。它还改变了传递给 ActiveRecord::Base.where 的值的行为,这使得我们可以在 Active Record 的大部分功能中使用我们的领域对象,而无需依赖实现细节或猴子补丁。

您可以通过以下方式实现一些目标

  • 可以覆盖 Active Record 检测到的类型。
  • 还可以提供默认值。
  • 属性不需要由数据库列支持。
# db/schema.rb
create_table :store_listings, force: true do |t|
  t.decimal :price_in_cents
  t.string :my_string, default: "original default"
end
# app/models/store_listing.rb
class StoreListing < ActiveRecord::Base
end
store_listing = StoreListing.new(price_in_cents: '10.1')

# before
store_listing.price_in_cents # => BigDecimal.new(10.1)
StoreListing.new.my_string # => "original default"

class StoreListing < ActiveRecord::Base
  attribute :price_in_cents, :integer # custom type
  attribute :my_string, :string, default: "new default" # default value
  attribute :my_default_proc, :datetime, default: -> { Time.now } # default value
  attribute :field_without_db_column, :integer, array: true
end

# after
store_listing.price_in_cents # => 10
StoreListing.new.my_string # => "new default"
StoreListing.new.my_default_proc # => 2015-05-30 11:04:48 -0600
model = StoreListing.new(field_without_db_column: ["1", "2", "3"])
model.attributes # => {field_without_db_column: [1, 2, 3]}

创建自定义类型

您可以定义自己的自定义类型,只要它们响应值类型上定义的方法即可。您的类型对象将调用 deserializecast 方法,并从数据库或控制器获取原始输入。这在进行自定义转换时很有用,例如货币数据。

查询

当调用 ActiveRecord::Base.where 时,它将使用模型类定义的类型将值转换为 SQL,调用类型对象上的 serialize

这使得对象能够指定在执行 SQL 查询时如何转换值。

脏追踪

允许属性的类型更改脏追踪的执行方式。

有关详细说明,请参阅其文档

2.4. 测试运行器

引入了一个新的测试运行器,以增强从 Rails 运行测试的能力。要使用此测试运行器,只需键入 bin/rails test

测试运行器受到 RSpecminitest-reportersmaxitest 及其他工具的启发。它包括一些显著的改进

  • 使用测试的行号运行单个测试。
  • 指定测试的行号运行多个测试。
  • 改进了失败消息,这还简化了重新运行失败测试。
  • 使用 -f 选项快速失败,以便在发生失败时立即停止测试,而不是等待整个套件完成。
  • 使用 -d 选项将测试输出推迟到完整测试运行结束。
  • 使用 -b 选项输出完整的异常回溯。
  • 与 minitest 集成,允许使用 -s 选项设置测试种子数据,-n 选项按名称运行特定测试,-v 选项获取更详细的输出等等。
  • 彩色测试输出。

3. Railties

有关详细更改,请参阅变更日志

3.1. 移除

  • 移除了调试器支持,请改用 byebug。Ruby 2.2 不支持 debugger。(提交

  • 移除了已废弃的 test:alltest:all:db 任务。(提交

  • 移除了已废弃的 Rails::Rack::LogTailer。(提交

  • 移除了已废弃的 RAILS_CACHE 常量。(提交

  • 移除了已废弃的 serve_static_assets 配置。(提交

  • 移除了文档任务 doc:appdoc:railsdoc:guides。(提交

  • 从默认栈中移除了 Rack::ContentLength 中间件。(提交

3.2. 弃用

  • 废弃了 config.static_cache_control,改用 config.public_file_server.headers。(拉取请求

  • 废弃了 config.serve_static_files,改用 config.public_file_server.enabled。(拉取请求

  • 废弃了 rails 任务命名空间中的任务,改用 app 命名空间。(例如,rails:updaterails:template 任务重命名为 app:updateapp:template。)(拉取请求

3.3. 显著变更

  • 添加了 Rails 测试运行器 bin/rails test。(拉取请求

  • 新生成的应用程序和插件将获得 Markdown 格式的 README.md。(提交拉取请求

  • 添加了 bin/rails restart 任务,通过触摸 tmp/restart.txt 来重启您的 Rails 应用程序。(拉取请求

  • 添加了 bin/rails initializers 任务,用于打印出所有已定义的初始化器及其被 Rails 调用的顺序。(拉取请求

  • 添加了 bin/rails dev:cache 以在开发模式下启用或禁用缓存。(拉取请求

  • 添加了 bin/update 脚本以自动更新开发环境。(拉取请求

  • 通过 bin/rails 代理 Rake 任务。(拉取请求拉取请求

  • 新应用程序在 Linux 和 macOS 上默认启用事件文件系统监视器。可以通过向生成器传递 --skip-listen 来选择禁用该功能。(提交提交

  • 生成应用程序时,可以选择在生产环境中使用环境变量 RAILS_LOG_TO_STDOUT 记录到 STDOUT。(拉取请求

  • 为新应用程序启用带有 IncludeSubdomains 头的 HSTS。(拉取请求

  • 应用程序生成器写入一个新文件 config/spring.rb,它告诉 Spring 监视其他公共文件。(提交

  • 添加了 --skip-action-mailer 以在生成新应用程序时跳过 Action Mailer。(拉取请求

  • 移除了 tmp/sessions 目录及其相关的清除 rake 任务。(拉取请求

  • 支架生成器生成的 _form.html.erb 更改为使用局部变量。(拉取请求

  • 在生产环境中禁用类的自动加载。(提交

4. Action Pack

有关详细更改,请参阅变更日志

4.1. 移除

  • 移除了 ActionDispatch::Request::Utils.deep_munge。(提交

  • 移除了 ActionController::HideActions。(拉取请求

  • 移除了 respond_torespond_with 占位符方法,此功能已提取到 responders gem 中。(提交

  • 移除了已废弃的断言文件。(提交

  • 移除了 URL 助手中已废弃的字符串键用法。(提交

  • 移除了 *_path 助手上已废弃的 only_path 选项。(提交

  • 移除了已废弃的 NamedRouteCollection#helpers。(提交

  • 移除了对使用不包含 #:to 选项定义路由的废弃支持。(提交

  • 移除了已废弃的 ActionDispatch::Response#to_ary。(提交

  • 移除了已废弃的 ActionDispatch::Request#deep_munge。(提交

  • 移除了已废弃的 ActionDispatch::Http::Parameters#symbolized_path_parameters。(提交

  • 移除了控制器测试中已废弃的 use_route 选项。(提交

  • 移除了 assignsassert_template。这两个方法都已提取到 rails-controller-testing gem 中。(拉取请求

4.2. 弃用

  • 废弃了所有 *_filter 回调,改用 *_action 回调。(拉取请求

  • 废弃了 *_via_redirect 集成测试方法。在请求调用后手动使用 follow_redirect! 以获得相同的行为。(拉取请求

  • 废弃了 AbstractController#skip_action_callback,改用单独的 skip_callback 方法。(拉取请求

  • 废弃了 render 方法的 :nothing 选项。(拉取请求

  • 废弃了 head 方法将第一个参数作为 Hash 传递以及默认状态码。(拉取请求

  • 废弃了使用字符串或符号作为中间件类名。请改用类名。(提交

  • 废弃了通过常量访问 MIME 类型(例如 Mime::HTML)。请改用带符号的下标运算符(例如 Mime[:html])。(拉取请求

  • 废弃了 redirect_to :back,改用 redirect_back,后者接受一个必需的 fallback_location 参数,从而消除了 RedirectBackError 的可能性。(拉取请求

  • ActionDispatch::IntegrationTestActionController::TestCase 废弃了位置参数,改用关键字参数。(拉取请求

  • 废弃了 :controller:action 路径参数。(拉取请求

  • 废弃了控制器实例上的 env 方法。(提交

  • ActionDispatch::ParamsParser 已废弃并从中​​间件栈中移除。要配置参数解析器,请使用 ActionDispatch::Request.parameter_parsers=。(提交提交

4.3. 显著变更

  • 添加了 ActionController::Renderer 以在控制器动作之外渲染任意模板。(拉取请求

  • ActionController::TestCaseActionDispatch::Integration HTTP 请求方法中迁移到关键字参数语法。(拉取请求

  • 向 Action Controller 添加了 http_cache_forever,因此我们可以缓存一个永不过期的响应。(拉取请求

  • 提供更友好的请求变体访问方式。(拉取请求

  • 对于没有相应模板的动作,渲染 head :no_content 而不是抛出错误。(拉取请求

  • 添加了为控制器覆盖默认表单构建器的功能。(拉取请求

  • 添加了对仅 API 应用程序的支持。ActionController::API 作为 ActionController::Base 的替代品用于此类应用程序。(拉取请求

  • 使 ActionController::Parameters 不再继承自 HashWithIndifferentAccess。(拉取请求

  • 通过使 config.force_sslconfig.ssl_options 不那么危险且更容易禁用,使其更容易选择加入。(拉取请求

  • 添加了向 ActionDispatch::Static 返回任意头部的功能。(拉取请求

  • protect_from_forgery 的 prepend 默认值更改为 false。(提交

  • ActionController::TestCase 将在 Rails 5.1 中移至其自己的 gem。请改用 ActionDispatch::IntegrationTest。(提交

  • Rails 默认生成弱 ETag。(拉取请求

  • 没有显式 render 调用且没有相应模板的控制器操作将隐式渲染 head :no_content,而不是抛出错误。(拉取请求 12

  • 添加了每个表单 CSRF 令牌的选项。(拉取请求

  • 在集成测试中添加了请求编码和响应解析。(拉取请求

  • 添加 ActionController#helpers 以在控制器级别访问视图上下文。(拉取请求

  • 废弃的 flash 消息在存储到会话之前被移除。(拉取请求

  • 添加了对将记录集合传递给 fresh_whenstale? 的支持。(拉取请求

  • ActionController::Live 变成了 ActiveSupport::Concern。这意味着它不能在不使用 ActiveSupport::ConcernActionController::Live 扩展其他模块的情况下直接包含,否则在生产环境中将不起作用。有些人可能正在使用另一个模块来包含一些特殊的 Warden/Devise 身份验证失败处理代码,因为当使用 ActionController::Live 时,中间件无法捕获由生成线程抛出的 :warden。(此问题中的更多详细信息

  • 引入 Response#strong_etag=#weak_etag= 以及 fresh_whenstale? 的类似选项。(拉取请求

5. Action View

有关详细更改,请参阅变更日志

5.1. 移除

  • 移除了已废弃的 AbstractController::Base::parent_prefixes。(提交

  • 移除了 ActionView::Helpers::RecordTagHelper,此功能已提取到 record_tag_helper gem 中。(拉取请求

  • 移除了 translate 助手的 :rescue_format 选项,因为它不再受 I18n 支持。(拉取请求

5.2. 显著变更

  • 将默认模板处理器从 ERB 更改为 Raw。(提交

  • 集合渲染可以缓存并一次获取多个局部。(拉取请求提交

  • 添加了对显式依赖项的通配符匹配。(拉取请求

  • 使 disable_with 成为提交标签的默认行为。在提交时禁用按钮以防止重复提交。(拉取请求

  • 部分模板名称不再必须是有效的 Ruby 标识符。(提交

  • datetime_tag 助手现在生成类型为 datetime-local 的输入标签。(拉取请求

  • 允许在使用 render partial: 助手渲染时使用块。(拉取请求

6. Action Mailer

有关详细更改,请参阅变更日志

6.1. 移除

  • 移除了电子邮件视图中已废弃的 *_path 助手。(提交

  • 移除了已废弃的 deliverdeliver! 方法。(提交

6.2. 显著变更

  • 模板查找现在尊重默认区域设置和 I18n 回退。(提交

  • 为通过生成器创建的 mailer 添加了 _mailer 后缀,遵循控制器和作业中使用的相同命名约定。(拉取请求

  • 添加了 assert_enqueued_emailsassert_no_enqueued_emails。(拉取请求

  • 添加了 config.action_mailer.deliver_later_queue_name 配置以设置邮件队列名称。(拉取请求

  • 添加了对 Action Mailer 视图中片段缓存的支持。添加了新的配置选项 config.action_mailer.perform_caching 以确定您的模板是否应执行缓存。(拉取请求

7. Active Record

有关详细更改,请参阅变更日志

7.1. 移除

  • 移除了允许将嵌套数组作为查询值传递的废弃行为。(拉取请求

  • 移除了已废弃的 ActiveRecord::Tasks::DatabaseTasks#load_schema。此方法已被 ActiveRecord::Tasks::DatabaseTasks#load_schema_for 替换。(提交

  • 移除了已废弃的 serialized_attributes。(提交

  • 移除了已废弃的 has_many :through 上的自动计数器缓存。(提交

  • 移除了已废弃的 sanitize_sql_hash_for_conditions。(提交

  • 移除了已废弃的 Reflection#source_macro。(提交

  • 移除了已废弃的 symbolized_base_classsymbolized_sti_name。(提交

  • 移除了已废弃的 ActiveRecord::Base.disable_implicit_join_references=。(提交

  • 移除了已废弃的通过字符串访问器访问连接规范。(提交

  • 移除了已废弃的支持预加载依赖于实例的关联。(提交

  • 移除了对 PostgreSQL 具有独占下限范围的废弃支持。(提交

  • 移除了修改带有缓存 Arel 的关系时的废弃警告。这会改为引发 ImmutableRelation 错误。(提交

  • 从核心中移除了 ActiveRecord::Serialization::XmlSerializer。此功能已提取到 activemodel-serializers-xml gem 中。(拉取请求

  • 从核心中移除了对旧版 mysql 数据库适配器的支持。大多数用户应该能够使用 mysql2。当找到维护者时,它将转换为单独的 gem。(拉取请求 1拉取请求 2

  • 移除了对 protected_attributes gem 的支持。(提交

  • 移除了对 9.1 以下 PostgreSQL 版本的支持。(拉取请求

  • 移除了对 activerecord-deprecated_finders gem 的支持。(提交

  • 移除了 ActiveRecord::ConnectionAdapters::Column::TRUE_VALUES 常量。(提交

7.2. 弃用

  • 废弃了将类作为查询中的值传递。用户应改用字符串。(拉取请求

  • 废弃了返回 false 作为中止 Active Record 回调链的方法。推荐的方法是 throw(:abort)。(拉取请求

  • 废弃了 ActiveRecord::Base.errors_in_transactional_callbacks=。(提交

  • 废弃了 Relation#uniq,改用 Relation#distinct。(提交

  • 废弃了 PostgreSQL :point 类型,取而代之的是将返回 Point 对象而不是 Array 的新类型(拉取请求

  • 废弃了通过向关联方法传递真值参数来强制重新加载关联。(拉取请求

  • 废弃了关联 restrict_dependent_destroy 错误的键,改用新的键名。(拉取请求

  • 同步 #tables 的行为。(拉取请求

  • 废弃了 SchemaCache#tablesSchemaCache#table_exists?SchemaCache#clear_table_cache!,改用它们新的数据源对应项。(拉取请求

  • 废弃了 SQLite3 和 MySQL 适配器上的 connection.tables。(拉取请求

  • 废弃了将参数传递给 #tables - 某些适配器(mysql2、sqlite3)的 #tables 方法会返回表和视图,而其他适配器(postgresql)只返回表。为了使它们的行为保持一致,#tables 将来只会返回表。(拉取请求

  • 废弃了 table_exists? - #table_exists? 方法会检查表和视图。为了使它们的行为与 #tables 保持一致,#table_exists? 将来只会检查表。(拉取请求

  • 废弃了向 find_nth 发送 offset 参数。请改用关系上的 offset 方法。(拉取请求

  • 废弃了 DatabaseStatements 中的 {insert|update|delete}_sql。请改用 {insert|update|delete} 公共方法。(拉取请求

  • 废弃了 use_transactional_fixtures,改用 use_transactional_tests 以提高清晰度。(拉取请求

  • 废弃了向 ActiveRecord::Connection#quote 传递列。(提交

  • find_in_batches 添加了 end 选项,以补充 start 参数,用于指定批处理停止的位置。(拉取请求

7.3. 显著变更

  • 在创建表时,向 references 添加了 foreign_key 选项。(提交

  • 新的属性 API。(提交

  • enum 定义添加了 :_prefix/:_suffix 选项。(拉取请求拉取请求

  • ActiveRecord::Relation 添加了 #cache_key。(拉取请求

  • timestamps 的默认 null 值更改为 false。(提交

  • 添加了 ActiveRecord::SecureToken,以便使用 SecureRandom 封装模型中属性的唯一令牌生成。(拉取请求

  • drop_table 添加了 :if_exists 选项。(拉取请求

  • 添加了 ActiveRecord::Base#accessed_fields,可用于快速发现从模型中读取了哪些字段,当您只想从数据库中选择所需数据时。(提交

  • ActiveRecord::Relation 添加了 #or 方法,允许使用 OR 运算符组合 WHERE 或 HAVING 子句。(提交

  • 添加了 ActiveRecord::Base.suppress 以防止在给定块中保存接收者。(拉取请求

  • 如果关联不存在,belongs_to 现在默认会触发验证错误。您可以使用 optional: true 在每个关联的基础上关闭此功能。同时,废弃了 belongs_torequired 选项,改用 optional。(拉取请求

  • 添加了 config.active_record.dump_schemas 以配置 db:structure:dump 的行为。(拉取请求

  • 添加了 config.active_record.warn_on_records_fetched_greater_than 选项。(拉取请求

  • 在 MySQL 中添加了原生 JSON 数据类型支持。(拉取请求

  • 添加了对 PostgreSQL 中并发删除索引的支持。(拉取请求

  • 在连接适配器上添加了 #views#view_exists? 方法。(拉取请求

  • 添加了 ActiveRecord::Base.ignored_columns 以使某些列在 Active Record 中不可见。(拉取请求

  • 添加了 connection.data_sourcesconnection.data_source_exists?。这些方法确定哪些关系可以支持 Active Record 模型(通常是表和视图)。(拉取请求

  • 允许 fixtures 文件在 YAML 文件本身中设置模型类。(拉取请求

  • 添加了在生成数据库迁移时默认使用 uuid 作为主键的功能。(拉取请求

  • 添加了 ActiveRecord::Relation#left_joinsActiveRecord::Relation#left_outer_joins。(拉取请求

  • 添加了 after_{create,update,delete}_commit 回调。(拉取请求

  • 迁移类所呈现的 API 版本化,这样我们就可以更改参数默认值,而不会破坏现有迁移,也不会强制它们通过废弃周期重写。(拉取请求

  • ApplicationRecord 是所有应用程序模型的新超类,类似于应用程序控制器子类化 ApplicationController 而不是 ActionController::Base。这为应用程序提供了一个单一位置来配置应用程序范围的模型行为。(拉取请求

  • 添加了 ActiveRecord #second_to_last#third_to_last 方法。(拉取请求

  • 添加了用存储在 PostgreSQL 和 MySQL 数据库元数据中的注释来注释数据库对象(表、列、索引)的功能。(拉取请求

  • 为 mysql2 适配器添加了预处理语句支持,适用于 mysql2 0.4.4+。此前,这仅在废弃的 mysql 旧版适配器上受支持。要启用,请在 config/database.yml 中设置 prepared_statements: true。(拉取请求

  • 添加了在关系对象上调用 ActiveRecord::Relation#update 的功能,它将在关系中的所有对象上运行回调验证。(拉取请求

  • save 方法添加了 :touch 选项,以便可以在不更新时间戳的情况下保存记录。(拉取请求

  • 为 PostgreSQL 添加了表达式索引和运算符类支持。(提交

  • 添加了 :index_errors 选项以向嵌套属性的错误添加索引。(拉取请求

  • 添加了对双向销毁依赖项的支持。(拉取请求

  • 添加了对事务测试中 after_commit 回调的支持。(拉取请求

  • 添加了 foreign_key_exists? 方法,以查看表上是否存在外键。(拉取请求

  • touch 方法添加了 :time 选项,以便用与当前时间不同的时间触摸记录。(拉取请求

  • 更改事务回调以不吞噬错误。在此更改之前,事务回调中引发的任何错误都会被捕获并打印在日志中,除非您使用(新废弃的)raise_in_transactional_callbacks = true 选项。

    现在这些错误不再被捕获,而是冒泡,与其他回调的行为一致。(提交

8. Active Model

有关详细更改,请参阅变更日志

8.1. 移除

8.2. 弃用

  • 废弃了返回 false 作为中止 Active Model 和 ActiveModel::Validations 回调链的方法。推荐的方法是 throw(:abort)。(拉取请求

  • 废弃了具有不一致行为的 ActiveModel::Errors#getActiveModel::Errors#setActiveModel::Errors#[]= 方法。(拉取请求

  • 废弃了 validates_length_of:tokenizer 选项,改用纯 Ruby。(拉取请求

  • 废弃了 ActiveModel::Errors#add_on_emptyActiveModel::Errors#add_on_blank,没有替代品。(拉取请求

8.3. 显著变更

  • 添加了 ActiveModel::Errors#details 以确定哪个验证器失败了。(拉取请求

  • ActiveRecord::AttributeAssignment 提取到 ActiveModel::AttributeAssignment,允许将其作为可包含模块用于任何对象。(拉取请求

  • 添加了 ActiveModel::Dirty#[attr_name]_previously_changed?ActiveModel::Dirty#[attr_name]_previous_change,以改进模型保存后对记录更改的访问。(拉取请求

  • 同时验证 valid?invalid? 上的多个上下文。(拉取请求

  • 更改 validates_acceptance_of 以接受 true 作为默认值,除了 1。(拉取请求

9. Active Job

有关详细更改,请参阅变更日志

9.1. 显著变更

  • ActiveJob::Base.deserialize 委托给作业类。这允许作业在序列化时附加任意元数据,并在执行时读回。(拉取请求

  • 添加了在每个作业的基础上配置队列适配器的功能,而不会相互影响。(拉取请求

  • 生成的作业现在默认继承自 app/jobs/application_job.rb。(拉取请求

  • 允许 DelayedJobSidekiqququequeue_classic 将作业 ID 报告回 ActiveJob::Base 作为 provider_job_id。(拉取请求拉取请求提交

  • 实现了一个简单的 AsyncJob 处理器和相关的 AsyncAdapter,将作业排队到 concurrent-ruby 线程池。(拉取请求

  • 将默认适配器从内联更改为异步。这是一个更好的默认值,因为测试将不再错误地依赖于同步发生的行为。(提交

10. Active Support

有关详细更改,请参阅变更日志

10.1. 移除

  • 移除了已废弃的 ActiveSupport::JSON::Encoding::CircularReferenceError。(提交

  • 移除了已废弃的方法 ActiveSupport::JSON::Encoding.encode_big_decimal_as_string=ActiveSupport::JSON::Encoding.encode_big_decimal_as_string。(提交

  • 移除了已废弃的 ActiveSupport::SafeBuffer#prepend。(提交

  • 移除了 Kernel 中已废弃的方法。silence_stderrsilence_streamcapturequietly。(提交

  • 移除了已废弃的 active_support/core_ext/big_decimal/yaml_conversions 文件。(提交

  • 移除了已废弃的方法 ActiveSupport::Cache::Store.instrumentActiveSupport::Cache::Store.instrument=。(提交

  • 移除了已废弃的 Class#superclass_delegating_accessor。请改用 Class#class_attribute。(拉取请求

  • 移除了已废弃的 ThreadSafe::Cache。请改用 Concurrent::Map。(拉取请求

  • 移除了 Object#itself,因为它已在 Ruby 2.2 中实现。(拉取请求

10.2. 弃用

  • 废弃了 MissingSourceFile,改用 LoadError。(提交

  • 废弃了 alias_method_chain,改用 Ruby 2.0 中引入的 Module#prepend。(拉取请求

  • 废弃了 ActiveSupport::Concurrency::Latch,改用 concurrent-ruby 中的 Concurrent::CountDownLatch。(拉取请求

  • 废弃了 number_to_human_size:prefix 选项,没有替代品。(拉取请求

  • 废弃了 Module#qualified_const_,改用内置的 Module#const_ 方法。(拉取请求

  • 废弃了传递字符串定义回调。(拉取请求

  • 废弃了 ActiveSupport::Cache::Store#namespaced_keyActiveSupport::Cache::MemCachedStore#escape_keyActiveSupport::Cache::FileStore#key_file_path。请改用 normalize_key。(拉取请求提交

  • 废弃了 ActiveSupport::Cache::LocaleCache#set_cache_value,改用 write_cache_value。(拉取请求

  • 废弃了向 assert_nothing_raised 传递参数。(拉取请求

  • 废弃了 Module.local_constants,改用 Module.constants(false)。(拉取请求

10.3. 显著变更

  • ActiveSupport::MessageVerifier 添加了 #verified#valid_message? 方法。(拉取请求

  • 更改了回调链中止的方式。从现在开始,中止回调链的首选方法是显式 throw(:abort)。(拉取请求

  • 新的配置选项 config.active_support.halt_callback_chains_on_return_false,用于指定 ActiveRecord、ActiveModel 和 ActiveModel::Validations 回调链是否可以通过在“before”回调中返回 false 来中止。(拉取请求

  • 将默认测试顺序从 :sorted 更改为 :random。(提交

  • DateTimeDateTime 添加了 #on_weekend?#on_weekday?#next_weekday#prev_weekday 方法。(拉取请求拉取请求

  • DateTimeDateTime#next_week#prev_week 添加了 same_time 选项。(拉取请求

  • DateTimeDateTime#yesterday#tomorrow 添加了 #prev_day#next_day 对应方法。(拉取请求

  • 添加了 SecureRandom.base58 用于生成随机 base58 字符串。(提交

  • ActiveSupport::TestCase 添加了 file_fixture。它提供了一种简单的机制来访问测试用例中的示例文件。(拉取请求

  • EnumerableArray 添加了 #without,用于返回不包含指定元素的枚举副本。(拉取请求

  • 添加了 ActiveSupport::ArrayInquirerArray#inquiry。(拉取请求

  • 添加了 ActiveSupport::TimeZone#strptime,允许从给定 timezone 解析时间。(提交

  • 添加了 Integer#positive?Integer#negative? 查询方法,与 Integer#zero? 类似。(提交

  • ActiveSupport::OrderedOptions 的获取方法添加了一个 bang 版本,如果值为 .blank?,则会引发 KeyError。(拉取请求

  • 添加了 Time.days_in_year,用于返回给定年份(或当前年份,如果未提供参数)的天数。(提交

  • 添加了事件文件监视器,以异步检测应用程序源代码、路由、区域设置等中的更改。(拉取请求

  • 添加了 thread_m/cattr_accessor/reader/writer 方法套件,用于声明每个线程的类和模块变量。(拉取请求

  • 添加了 Array#second_to_lastArray#third_to_last 方法。(拉取请求

  • 发布 ActiveSupport::ExecutorActiveSupport::Reloader API,允许组件和库管理和参与应用程序代码的执行以及应用程序重载过程。(拉取请求

  • ActiveSupport::Duration 现在支持 ISO8601 格式化和解析。(拉取请求

  • parse_json_times 启用时,ActiveSupport::JSON.decode 现在支持解析 ISO8601 本地时间。(拉取请求

  • ActiveSupport::JSON.decode 现在为日期字符串返回 Date 对象。(拉取请求

  • 添加了 TaggedLogging 的功能,允许日志器多次实例化,以便它们不共享彼此的标签。(拉取请求

11. 鸣谢

请参阅Rails 贡献者完整列表,感谢许多人花费大量时间使 Rails 成为一个稳定而健壮的框架。向他们所有人致敬。



回到顶部