edge
更多信息请访问 rubyonrails.org: 更多 Ruby on Rails

Ruby on Rails 5.0 发布说明

Rails 5.0 的亮点:

这些发布说明仅涵盖了主要更改。要了解各种错误修复和更改,请参阅更改日志或查看 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 应用程序的其余部分相同的风格和形式编写实时功能,同时保持高性能和可扩展性。它是一个全栈解决方案,提供了客户端 JavaScript 框架和服务器端 Ruby 框架。您可以访问使用 Active Record 或您选择的 ORM 编写的完整域模型。

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

2.2 API 应用程序

Rails 现在可以用于创建精简的仅限 API 的应用程序。这对于创建和提供类似于 TwitterGitHub 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 # 自定义类型
  attribute :my_string, :string, default: "new default" # 默认值
  attribute :my_default_proc, :datetime, default: -> { Time.now } # 默认值
  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代替。debugger在Ruby 2.2中不受支持。 (提交记录)
  • 移除了已弃用的 test:alltest:all:db 任务。 (commit)

  • 移除了已弃用的 Rails::Rack::LogTailer。 (commit)

  • 移除了已弃用的 RAILS_CACHE 常量。 (commit)

  • 移除了已弃用的 serve_static_assets 配置。 (commit)

  • 移除了文档任务 doc:appdoc:railsdoc:guides。 (commit)

  • 从默认堆栈中移除了 Rack::ContentLength 中间件。 (Commit)

3.2 弃用

  • 弃用了 config.static_cache_control,使用 config.public_file_server.headers 替代。 (Pull Request)

  • 弃用了 config.serve_static_files,使用 config.public_file_server.enabled 替代。 (Pull Request)

  • 弃用了 rails 任务命名空间中的任务,使用 app 命名空间替代。 (例如,rails:updaterails:template 任务被重命名为 app:updateapp:template。) (Pull Request)

3.3 显著变化

  • 添加了 Rails 测试运行器 bin/rails test。 (Pull Request)

  • 新生成的应用程序和插件在 Markdown 中获取一个 README.md 文件。 (commit, Pull Request)

  • 添加了 bin/rails restart 任务,通过触发 tmp/restart.txt 来重新启动 Rails 应用程序。 (Pull Request)

  • 添加了 bin/rails initializers 任务,按照 Rails 调用它们的顺序打印出所有定义的初始化器。 (Pull Request)

  • 添加了 bin/rails dev:cache,用于在开发模式下启用或禁用缓存。 (Pull Request)

  • 添加了 bin/update 脚本,用于自动更新开发环境。 (Pull Request)

  • 通过 bin/rails 代理 Rake 任务。 (Pull Request, Pull Request)

  • 在 Linux 和 macOS 上启用了新应用程序的事件驱动文件系统监视器。可以通过在生成器中传递 --skip-listen 来选择不使用该功能。 (commit, commit)

  • 生成的应用程序可以选择使用环境变量 RAILS_LOG_TO_STDOUT 在生产环境中将日志记录到 STDOUT。 (Pull Request)

  • 为新应用程序启用了带有 IncludeSubdomains 头的 HSTS。 (Pull Request)

  • 应用程序生成器写入了一个新文件 config/spring.rb,告诉 Spring 监视其他常见文件。 (commit)

  • 在生成新应用程序时添加了 --skip-action-mailer 选项,以跳过 Action Mailer。 (Pull Request)

  • 移除了 tmp/sessions 目录及其关联的清理 rake 任务。 (Pull Request)

  • 将由脚手架生成的 _form.html.erb 更改为使用局部变量。 (Pull Request)

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

4 Action Pack

请参阅更新日志以获取详细的更改信息。

4.1 移除

  • 移除了ActionDispatch::Request::Utils.deep_munge。 (commit)

  • 移除了ActionController::HideActions。 (Pull Request)

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

  • 移除了已弃用的断言文件。 (commit)

  • 移除了在URL助手中使用字符串键的已弃用用法。 (commit)

  • 移除了在*_path助手中已弃用的only_path选项。 (commit)

  • 移除了已弃用的NamedRouteCollection#helpers。 (commit)

  • 移除了使用不包含#to选项定义路由的已弃用支持。 (commit)

  • 移除了已弃用的ActionDispatch::Response#to_ary。 (commit)

  • 移除了已弃用的ActionDispatch::Request#deep_munge。 (commit)

  • 移除了已弃用的 ActionDispatch::Http::Parameters#symbolized_path_parameters。 (commit)

  • 移除了控制器测试中已弃用的use_route选项。 (commit)

  • 移除了assignsassert_template。这两个方法已被提取到 rails-controller-testing gem中。 (Pull Request)

4.2 弃用

  • 弃用了所有*_filter回调,改用*_action回调。 (Pull Request)

  • 弃用了*_via_redirect集成测试方法。在请求调用后手动使用follow_redirect! 来实现相同的行为。 (Pull Request)

  • 弃用了AbstractController#skip_action_callback,改用单独的 skip_callback 方法。 (Pull Request)

  • 弃用了render方法的:nothing选项。 (Pull Request)

  • 弃用了将第一个参数作为Hash和默认状态码传递给head方法。 (Pull Request)

  • 弃用了使用字符串或符号作为中间件类名的方式。改用类名。 (commit)

  • 弃用了通过常量访问MIME类型(例如Mime::HTML)。改用使用符号的下标操作符(例如Mime[:html])。 (Pull Request)

  • 弃用了redirect_to :back,改用接受必需的fallback_location参数的redirect_back,从而消除了RedirectBackError的可能性。 (Pull Request)

  • ActionDispatch::IntegrationTestActionController::TestCase弃用了位置参数,改用关键字参数。 (Pull Request)

  • 弃用了controlleraction路径参数。 (Pull Request)

  • 弃用了控制器实例上的env方法。 (commit)

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

    重要更改

  • 添加了ActionController::Renderer,用于在控制器操作之外渲染任意模板。 (拉取请求)

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

  • 在Action Controller中添加了http_cache_forever,以便我们可以缓存永不过期的响应。 (拉取请求)

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

  • 对于没有对应模板的操作,渲染head :no_content而不是引发错误。 (拉取请求)

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

  • 添加了对API-only应用程序的支持。 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默认生成弱ETags。 (拉取请求)

  • 没有显式render调用且没有对应模板的控制器操作将隐式渲染head :no_content而不是引发错误。 (拉取请求 1, 2)

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

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

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

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

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

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

  • 引入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后缀,遵循控制器和作业中使用的相同命名约定。 (拉取请求)

  • 添加了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。 (commit)

  • 移除了已弃用的has_many :through上的自动计数缓存。 (commit)

  • 移除了已弃用的sanitize_sql_hash_for_conditions。 (commit)

  • 移除了已弃用的Reflection#source_macro。 (commit)

  • 移除了已弃用的symbolized_base_classsymbolized_sti_name。 (commit)

  • 移除了已弃用的ActiveRecord::Base.disable_implicit_join_references=。 (commit)

  • 移除了通过字符串访问器访问连接规范的已弃用支持。 (commit)

  • 移除了预加载实例相关联的已弃用支持。 (commit)

  • 移除了对具有排他性下界的PostgreSQL范围的已弃用支持。 (commit)

  • 移除了使用缓存的Arel修改关系时的已弃用警告。 现在会引发ImmutableRelation错误。 (commit)

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

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

  • 移除了对protected_attributes gem的支持。 (commit)

  • 移除了对低于9.1版本的PostgreSQL的支持。 (Pull Request)

  • 移除了对activerecord-deprecated_finders gem的支持。 (commit)

  • 移除了ActiveRecord::ConnectionAdapters::Column::TRUE_VALUES常量。 (commit)

7.2 弃用

  • 弃用在查询中将类作为值传递。用户应该传递字符串而不是类。 (Pull Request)

  • 弃用将false作为终止Active Record回调链的方式。推荐的方式是使用throw(:abort)。 (Pull Request)

  • 弃用ActiveRecord::Base.errors_in_transactional_callbacks=。 (commit)

  • 弃用Relation#uniq,使用Relation#distinct代替。 (commit)

  • 弃用PostgreSQL的:point类型,改用返回Point对象而不是Array的新类型。 (Pull Request)

  • 弃用通过传递真值参数给关联方法来强制重新加载关联。 (Pull Request)

  • 弃用关联restrict_dependent_destroy错误的键,改用新的键名。 (Pull Request)

  • 同步#tables的行为。 (Pull Request)

  • 弃用SchemaCache#tablesSchemaCache#table_exists?SchemaCache#clear_table_cache!,改用它们的新数据源对应方法。 (Pull Request)

  • 在SQLite3和MySQL适配器上弃用了connection.tables。 (Pull Request)

  • 弃用了向#tables传递参数的功能 - 一些适配器(mysql2,sqlite3)的#tables方法会返回表和视图,而其他适配器(postgresql)只返回表。为了使它们的行为一致,#tables将来只返回表。 (Pull Request)

  • 弃用了table_exists?方法 - #table_exists?方法会检查表和视图。为了使其与#tables的行为一致,#table_exists?将来只检查表。 (Pull Request)

  • 弃用了向find_nth发送offset参数的功能。请改用关系上的offset方法。 (Pull Request)

  • DatabaseStatements中弃用了{insert|update|delete}_sql。请改用相应的公共方法{insert|update|delete}。 (Pull Request)

  • 弃用了use_transactional_fixtures,建议使用更明确的use_transactional_tests。 (Pull Request)

  • 弃用了向ActiveRecord::Connection#quote传递列的功能。 (commit)

  • find_in_batches中添加了一个end选项,用于补充start参数,指定批处理的结束位置。 (Pull Request)

7.3 显著变化

  • 在创建表时,为references添加了一个foreign_key选项。 (commit)

  • 新增了属性API。 (commit)

  • enum定义中添加了:_prefix/:_suffix选项。 (Pull Request, Pull Request)

  • ActiveRecord::Relation中添加了#cache_key方法。 (Pull Request)

  • timestamps的默认null值更改为false。 (commit)

  • 添加了ActiveRecord::SecureToken,用于封装使用SecureRandom为模型中的属性生成唯一令牌。 (Pull Request)

  • drop_table添加了if_exists选项。 (Pull Request)

  • 添加了ActiveRecord::Base#accessed_fields,用于快速发现从模型中读取了哪些字段,以便只选择所需的数据。 (commit)

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

  • 添加了ActiveRecord::Base.suppress,用于在给定的块中阻止接收器被保存。 (Pull Request)

  • belongs_to现在默认情况下会触发验证错误,如果关联不存在。可以通过optional: true在每个关联上关闭此功能。同时弃用required选项,建议使用optional选项替代belongs_to。 (Pull Request)

  • 添加了config.active_record.dump_schemas配置项,用于配置db:structure:dump的行为。 (Pull Request)

  • 添加了config.active_record.warn_on_records_fetched_greater_than选项。 (Pull Request)

  • 在MySQL中添加了对原生JSON数据类型的支持。 (Pull Request)

  • 在PostgreSQL中添加了并发删除索引的支持。 (Pull Request)

  • 在连接适配器上添加了#views#view_exists?方法。 (Pull Request)

  • 添加了ActiveRecord::Base.ignored_columns,用于使某些列在Active Record中不可见。 (Pull Request)

  • 添加了connection.data_sourcesconnection.data_source_exists?方法。 这些方法确定可以用于支持Active Record模型的关系(通常是表和视图)。 (Pull Request)

  • 允许夹具文件在YAML文件本身中设置模型类。 (Pull Request)

  • 添加了在生成数据库迁移时默认使用uuid作为主键的能力。 (Pull Request)

  • 添加了ActiveRecord::Relation#left_joinsActiveRecord::Relation#left_outer_joins。 (Pull Request)

  • 添加了after_{create,update,delete}_commit回调。 (Pull Request)

  • 对迁移类呈现的API进行了版本化,以便我们可以更改参数默认值而不会破坏现有的迁移, 或者迫使它们通过废弃周期进行重写。 (Pull Request)

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

  • 添加了ActiveRecord的#second_to_last#third_to_last方法。 (Pull Request)

  • 在PostgreSQL和MySQL中添加了对数据库对象(表、列、索引)的注释支持,这些注释存储在数据库元数据中。 (Pull Request)

  • mysql2适配器中添加了对预编译语句的支持,适用于mysql2 0.4.4+,之前只支持已弃用的mysql传统适配器。 要启用此功能,请在config/database.yml中设置prepared_statements: true。 (Pull Request)

  • 添加了在关系对象上调用ActionRecord::Relation#update的能力,这将在关系中的所有对象上运行验证和回调。 (Pull Request)

  • save方法中添加了:touch选项,以便可以保存记录而不更新时间戳。 (Pull Request)

  • 为PostgreSQL添加了表达式索引和操作符类支持。 (commit)

  • 添加了 :index_errors 选项,用于在嵌套属性的错误中添加索引。 (Pull Request)

  • 添加了双向销毁依赖的支持。 (Pull Request)

  • 在事务测试中添加了对 after_commit 回调的支持。 (Pull Request)

  • 添加了 foreign_key_exists? 方法,用于查看表上是否存在外键。 (Pull Request)

  • touch 方法中添加了 :time 选项,用于触发具有不同时间的记录 (Pull Request)

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

    现在,这些错误不再被捕获,而是冒泡上升,与其他回调的行为相匹配。 (commit)

8 Active Model

详细更改请参阅更新日志

8.1 删除

8.2 弃用

  • 弃用了将 false 作为阻止 Active Model 和 ActiveModel::Validations 回调链的方式。推荐的方式是使用 throw(:abort)。 (Pull Request)

  • 弃用了具有不一致行为的 ActiveModel::Errors#getActiveModel::Errors#setActiveModel::Errors#[]= 方法。 (Pull Request)

  • 弃用了 validates_length_of:tokenizer 选项,改用纯 Ruby。 (Pull Request)

  • 弃用了 ActiveModel::Errors#add_on_emptyActiveModel::Errors#add_on_blank,没有替代方法。 (Pull Request)

8.3 重要更改

  • 添加了 ActiveModel::Errors#details 方法,用于确定验证器失败的原因。 (Pull Request)

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

  • 添加了 ActiveModel::Dirty#[attr_name]_previously_changed?ActiveModel::Dirty#[attr_name]_previous_change,以改进在模型保存后访问记录的更改。 (Pull Request)

  • valid?invalid? 中同时验证多个上下文。 (Pull Request)

  • 更改 validates_acceptance_of,除了 1 之外,还接受 true 作为默认值。 (Pull Request)

    Active Job

请参考Changelog以获取详细的更改信息。

8.4 主要更改

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

  • 添加能够在每个作业上配置队列适配器的能力,而不会相互影响。 (Pull Request)

  • 生成的作业现在默认继承自 app/jobs/application_job.rb。 (Pull Request)

  • 允许 DelayedJobSidekiqququequeue_classic 将作业 ID 作为 provider_job_id 返回给 ActiveJob::Base。 (Pull Request, Pull Request, commit)

  • 实现一个简单的 AsyncJob 处理器和相关的 AsyncAdapter,将作业排队到 concurrent-ruby 线程池。 (Pull Request)

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

9 Active Support

请参考Changelog以获取详细的更改信息。

9.1 移除

  • 移除了已弃用的 ActiveSupport::JSON::Encoding::CircularReferenceError。 (commit)

  • 移除了已弃用的方法 ActiveSupport::JSON::Encoding.encode_big_decimal_as_string=ActiveSupport::JSON::Encoding.encode_big_decimal_as_string。 (commit)

  • 移除了已弃用的 ActiveSupport::SafeBuffer#prepend。 (commit)

  • 移除了 Kernel 中的已弃用方法。使用 silence_stderrsilence_streamcapturequietly。 (commit)

  • 移除了已弃用的 active_support/core_ext/big_decimal/yaml_conversions 文件。 (commit)

  • 移除了已弃用的方法 ActiveSupport::Cache::Store.instrumentActiveSupport::Cache::Store.instrument=。 (commit)

  • 移除了已弃用的 Class#superclass_delegating_accessor。 使用 Class#class_attribute 替代。 (Pull Request)

  • 移除了已弃用的 ThreadSafe::Cache。使用 Concurrent::Map 替代。 (Pull Request)

  • 移除了 Object#itself,因为它在 Ruby 2.2 中已实现。 (Pull Request)

9.2 弃用

  • 弃用 MissingSourceFile,改用 LoadError。 (commit)

  • 弃用 alias_method_chain,改用 Ruby 2.0 中引入的 Module#prepend。 (Pull Request)

  • 弃用 ActiveSupport::Concurrency::Latch,改用 concurrent-ruby 的 Concurrent::CountDownLatch。 (Pull Request)

  • 弃用 number_to_human_size:prefix 选项,没有替代方案。 (Pull Request)

  • 弃用 Module#qualified_const_,改用内置的 Module#const_ 方法。 (Pull Request)

  • 弃用传递字符串来定义回调。 (Pull Request)

  • 弃用 ActiveSupport::Cache::Store#namespaced_keyActiveSupport::Cache::MemCachedStore#escape_keyActiveSupport::Cache::FileStore#key_file_path。 使用 normalize_key 替代。 (Pull Request, commit)

  • 弃用ActiveSupport::Cache::LocaleCache#set_cache_value,改用write_cache_value。(Pull Request

  • 弃用向assert_nothing_raised传递参数的方式。(Pull Request

  • 弃用Module.local_constants,改用Module.constants(false)。(Pull Request

9.3 重要变更

  • ActiveSupport::MessageVerifier中添加了#verified#valid_message?方法。(Pull Request

  • 改变了回调链的中止方式。现在,中止回调链的首选方法是显式地使用throw(:abort)。(Pull Request

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

  • 将默认的测试顺序从:sorted改为:random。(commit

  • DateTimeDateTime中添加了#on_weekend?#on_weekday?#next_weekday#prev_weekday方法。(Pull RequestPull Request

  • DateTimeDateTime#next_week#prev_week中添加了same_time选项。(Pull Request

  • DateTimeDateTime中添加了#prev_day#next_day方法,作为#yesterday#tomorrow的对应方法。(Pull Request

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

  • ActiveSupport::TestCase中添加了file_fixture。它提供了一种在测试用例中访问示例文件的简单机制。(Pull Request

  • EnumerableArray上添加了#without方法,用于返回不包含指定元素的可枚举对象的副本。(Pull Request

  • 添加了ActiveSupport::ArrayInquirerArray#inquiry。(Pull Request

  • 添加了ActiveSupport::TimeZone#strptime,允许按照给定时区解析时间。(commit

  • 添加了Integer#positive?Integer#negative?查询方法,类似于Integer#zero?。(commit

  • ActiveSupport::OrderedOptions的get方法中添加了一个感叹号版本,如果值为.blank?,则会引发KeyError异常。(Pull Request

  • 添加了Time.days_in_year,用于返回给定年份的天数,如果没有提供参数,则返回当前年份。(commit

  • 添加了一个事件驱动的文件监视器,用于异步检测应用程序源代码、路由、本地化等的更改。(Pull Request

  • 添加了一组方法thread_m/cattr_accessor/reader/writer,用于声明每个线程独立的类和模块变量。(Pull Request

  • 添加了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的功能,允许多次实例化日志记录器,以便它们不共享标签。 (拉取请求)

10 致谢

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

反馈

欢迎您帮助改进本指南的质量。

如果您发现任何拼写错误或事实错误,请贡献您的意见。 要开始,请阅读我们的 文档贡献 部分。

您还可能会发现不完整的内容或过时的内容。 请为主要内容添加任何缺失的文档。请先检查 Edge 指南,以验证问题是否已经修复或尚未修复。 请参阅 Ruby on Rails 指南准则 以了解样式和规范。

如果您发现需要修复但无法自行修复的问题,请 提交问题

最后但同样重要的是,欢迎您在 官方 Ruby on Rails 论坛 上讨论有关 Ruby on Rails 文档的任何问题。