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 允许使用 Ruby 编写实时功能,其风格和形式与您的 Rails 应用程序的其他部分相同,同时仍然保持高性能和可扩展性。它是一个全栈解决方案,提供客户端 JavaScript 框架和服务器端 Ruby 框架。您可以访问使用 Active Record 或您选择的 ORM 编写的完整域模型。
有关更多信息,请参阅 Action Cable 概述 指南。
2.2 API 应用程序
Rails 现在可以用来创建精简的仅 API 应用程序。这对于创建和提供类似于 X 或 GitHub API 的 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]}
创建自定义类型
只要您的类型响应值类型上定义的方法,您就可以定义自己的自定义类型。方法 deserialize
或 cast
将在您的类型对象上调用,并使用来自数据库或控制器的原始输入。例如,当进行自定义转换(如 Money 数据)时,这很有用。
查询
当调用 ActiveRecord::Base.where
时,它将使用模型类定义的类型将值转换为 SQL,并在您的类型对象上调用 serialize
。
这使对象能够指定在执行 SQL 查询时如何转换值。
脏跟踪
属性的类型可以更改执行脏跟踪的方式。
请参阅其 文档,以了解详细说明。
2.4 测试运行器
已引入新的测试运行器,以增强从 Rails 运行测试的功能。要使用此测试运行器,只需键入 bin/rails test
。
测试运行器灵感来自 RSpec
、minitest-reporters
、maxitest
等。它包含以下一些值得注意的改进
- 使用测试的行号运行单个测试。
- 运行多个测试,并指向测试的行号。
- 改进的错误消息,也方便重新运行失败的测试。
- 使用
-f
选项快速失败,以便在发生错误时立即停止测试,而不是等待套件完成。 - 使用
-d
选项将测试输出延迟到完整测试运行结束时。 - 使用
-b
选项输出完整异常回溯。 - 与 minitest 集成,以允许使用
-s
选项进行测试种子数据、使用-n
选项按名称运行特定测试、使用-v
选项获得更详细的输出等。 - 彩色测试输出。
3 Railties
有关详细更改,请参阅 更改日志。
3.1 移除
移除了调试器支持,请改用 byebug。
debugger
不受 Ruby 2.2 支持。(提交)移除了已弃用的
test:all
和test:all:db
任务。(提交)移除了已弃用的
Rails::Rack::LogTailer
。(提交)移除了已弃用的
RAILS_CACHE
常量。(提交)移除了已弃用的
serve_static_assets
配置。(提交)移除了文档任务
doc:app
、doc:rails
和doc:guides
。(提交)从默认堆栈中移除了
Rack::ContentLength
中间件。(提交)
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:update
和rails:template
任务分别重命名为app:update
和app: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
选择将日志记录到标准输出中。 (Pull Request)为新应用程序启用 HSTS,并包含 IncludeSubdomains 头。 (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_to
和respond_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)删除
assigns
和assert_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
,建议使用redirect_back
,它接受一个必需的fallback_location
参数,从而消除了出现RedirectBackError
的可能性。 (Pull Request)ActionDispatch::IntegrationTest
和ActionController::TestCase
弃用位置参数,建议使用关键字参数。 (Pull Request)已弃用
:controller
和:action
路径参数。 (Pull Request)已弃用控制器实例上的 env 方法。 (commit)
ActionDispatch::ParamsParser
已弃用,并已从中间件堆栈中删除。 要配置参数解析器,请使用ActionDispatch::Request.parameter_parsers=
。 (commit, commit)
4.3 主要变化
新增
ActionController::Renderer
,用于在控制器操作之外渲染任意模板。 (Pull Request)ActionController::TestCase
和ActionDispatch::Integration
HTTP 请求方法迁移到关键字参数语法。 (Pull Request)在 Action Controller 中新增
http_cache_forever
,以便我们可以缓存永远不会过期的响应。 (Pull Request)提供更友好的请求变体访问方式。 (Pull Request)
对于没有对应模板的操作,渲染
head :no_content
而不是引发错误。 (Pull Request)新增了为控制器覆盖默认表单生成器的能力。 (Pull Request)
新增了对仅 API 应用的支持。
ActionController::API
被添加为这类应用程序中ActionController::Base
的替代品。 (Pull Request)使
ActionController::Parameters
不再继承自HashWithIndifferentAccess
。 (Pull Request)通过使
config.force_ssl
和config.ssl_options
的尝试更加安全且更容易禁用,使它们更容易选择加入。 (Pull Request)新增了将任意头返回到
ActionDispatch::Static
的能力。 (Pull Request)将
protect_from_forgery
的默认前缀更改为false
。 (commit)ActionController::TestCase
将在 Rails 5.1 中移到其自己的 gem 中。 使用ActionDispatch::IntegrationTest
代替。 (commit)Rails 默认情况下生成弱 ETag。 (Pull Request)
没有显式
render
调用且没有对应模板的控制器操作将隐式渲染head :no_content
而不是引发错误。 (Pull Request 1, 2)新增了对每个表单 CSRF 令牌的选项。 (Pull Request)
在集成测试中新增了请求编码和响应解析。 (Pull Request)
新增
ActionController#helpers
以在控制器级别访问视图上下文。 (Pull Request)在将闪存消息存储到会话之前,会删除已弃用的闪存消息。 (Pull Request)
新增了对将记录集合传递给
fresh_when
和stale?
的支持。 (Pull Request)ActionController::Live
成为一个ActiveSupport::Concern
。 这意味着它不能仅仅包含在其他模块中而不对它们进行ActiveSupport::Concern
扩展,否则ActionController::Live
在生产环境中将不起作用。 有些人可能正在使用另一个模块来包含一些特殊的Warden
/Devise
身份验证失败处理代码,因为中间件无法捕获由已生成线程抛出的:warden
,而这是使用ActionController::Live
的情况。 (此问题中有更多详细信息)引入
Response#strong_etag=
和#weak_etag=
,以及fresh_when
和stale?
的类似选项。 (Pull Request)
5 Action View
有关详细的更改内容,请参阅 变更日志。
5.1 删除部分
删除已弃用的
AbstractController::Base::parent_prefixes
。 (commit)删除
ActionView::Helpers::RecordTagHelper
,此功能已提取到 record_tag_helper gem 中。 (Pull Request)删除
translate
帮助程序的:rescue_format
选项,因为它不再受 I18n 支持。 (Pull Request)
5.2 主要变化
将默认模板处理程序从
ERB
更改为Raw
。 (commit)集合渲染可以缓存并一次获取多个部分。 (Pull Request, commit)
在显式依赖项中新增了通配符匹配。 (Pull Request)
使
disable_with
成为提交标签的默认行为。在提交时禁用按钮以防止重复提交。(Pull Request)局部模板名称不再需要是有效的 Ruby 标识符。(commit)
datetime_tag
帮助程序现在生成类型为datetime-local
的输入标签。(Pull Request)使用
render partial:
帮助程序渲染时允许使用块。(Pull Request)
6 Action Mailer
有关详细更改,请参阅 Changelog。
6.1 移除
6.2 重要更改
模板查找现在会尊重默认语言环境和 I18n 回退。(commit)
通过生成器创建的邮件程序添加了
_mailer
后缀,遵循控制器和作业中使用的相同命名约定。(Pull Request)添加了
assert_enqueued_emails
和assert_no_enqueued_emails
。(Pull Request)添加了
config.action_mailer.deliver_later_queue_name
配置以设置邮件程序队列名称。(Pull Request)添加了对 Action Mailer 视图中片段缓存的支持。添加了新的配置选项
config.action_mailer.perform_caching
来确定您的模板是否应该执行缓存。(Pull Request)
7 Active Record
有关详细更改,请参阅 Changelog。
7.1 移除
已移除允许将嵌套数组作为查询值传递的已弃用行为。(Pull Request)
已移除已弃用的
ActiveRecord::Tasks::DatabaseTasks#load_schema
。此方法已由ActiveRecord::Tasks::DatabaseTasks#load_schema_for
替换。(commit)已移除已弃用的
serialized_attributes
。(commit)已移除已弃用的
has_many :through
上的自动计数器缓存。(commit)已移除已弃用的
sanitize_sql_hash_for_conditions
。(commit)已移除已弃用的
Reflection#source_macro
。(commit)已移除已弃用的
symbolized_base_class
和symbolized_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)已移除核心中的对 legacy
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#tables
、SchemaCache#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)已弃用将
offset
参数发送到find_nth
。请使用关系上的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)添加了一个
end
选项到find_in_batches
,作为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
关闭它。同时弃用belongs_to
中的required
选项,改为使用optional
。(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_sources
和connection.data_source_exists?
。这些方法确定哪些关系可以用来支持 Active Record 模型(通常是表和视图)。(Pull Request)允许 fixture 文件在 YAML 文件本身中设置模型类。(Pull Request)
添加了在生成数据库迁移时默认使用
uuid
作为主键的能力。(Pull Request)添加了
ActiveRecord::Relation#left_joins
和ActiveRecord::Relation#left_outer_joins
。(Pull Request)添加了
after_{create,update,delete}_commit
回调。(Pull Request)对迁移类公开的 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 删除内容
删除了已弃用的
ActiveModel::Dirty#reset_#{attribute}
和ActiveModel::Dirty#reset_changes
。(拉取请求)删除了 XML 序列化。此功能已被提取到 activemodel-serializers-xml gem 中。(拉取请求)
删除了
ActionController::ModelNaming
模块。(拉取请求)
8.2 弃用内容
弃用返回
false
作为停止 Active Model 和ActiveModel::Validations
回调链的方法。推荐的方法是throw(:abort)
。(拉取请求)弃用
ActiveModel::Errors#get
、ActiveModel::Errors#set
和ActiveModel::Errors#[]=
方法,这些方法的行为不一致。(拉取请求)弃用
validates_length_of
的:tokenizer
选项,建议使用纯 Ruby。(拉取请求)弃用
ActiveModel::Errors#add_on_empty
和ActiveModel::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
。(拉取请求)允许
DelayedJob
、Sidekiq
、qu
、que
和queue_classic
将作业 ID 报告回ActiveJob::Base
作为provider_job_id
。(拉取请求、拉取请求、提交)实现了一个简单的
AsyncJob
处理器和相关的AsyncAdapter
,它们将作业排队到concurrent-ruby
线程池。(拉取请求)将默认适配器从内联更改为异步。这是更好的默认值,因为测试将不再错误地依赖于同步发生的 behavior。(提交)
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_stderr
、silence_stream
、capture
和quietly
。(提交)删除了已弃用的
active_support/core_ext/big_decimal/yaml_conversions
文件。(提交)删除了已弃用的方法
ActiveSupport::Cache::Store.instrument
和ActiveSupport::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_key
、ActiveSupport::Cache::MemCachedStore#escape_key
和ActiveSupport::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
。(提交)为
Date
、Time
和DateTime
添加了#on_weekend?
、#on_weekday?
、#next_weekday
、#prev_weekday
方法。(拉取请求、拉取请求)为
Date
、Time
和DateTime
的#next_week
和#prev_week
添加了same_time
选项。(拉取请求)为
Date
、Time
和DateTime
添加了#prev_day
和#next_day
,它们是#yesterday
和#tomorrow
的对应方法。(拉取请求)添加了
SecureRandom.base58
,用于生成随机的 base58 字符串。(提交)为
ActiveSupport::TestCase
添加了file_fixture
。它提供了一种简单的机制来访问测试用例中的示例文件。(拉取请求)在
Enumerable
和Array
上添加了#without
,以返回不包含指定元素的可枚举对象的副本。(拉取请求)添加了
ActiveSupport::ArrayInquirer
和Array#inquiry
。(拉取请求)添加了
ActiveSupport::TimeZone#strptime
,以允许像从给定时区解析时间一样解析时间。(提交)添加了
Integer#positive?
和Integer#negative?
查询方法,类似于Integer#zero?
。(提交)为
ActiveSupport::OrderedOptions
获取方法添加了一个叹号版本,如果值为.blank?
,则会引发KeyError
。(拉取请求)添加了
Time.days_in_year
,用于返回给定年份的日数,如果未提供参数,则返回当前年份的日数。(提交)添加了一个事件文件监视器,用于异步检测应用程序源代码、路由、区域设置等的更改。(拉取请求)
添加了
thread_m/cattr_accessor/reader/writer
方法集,用于声明按线程存在的类和模块变量。(拉取请求)添加了
Array#second_to_last
和Array#third_to_last
方法。(拉取请求)发布 `ActiveSupport::Executor` 和 `ActiveSupport::Reloader` API,允许组件和库管理并参与应用程序代码的执行和应用程序重新加载过程。(Pull Request)
`ActiveSupport::Duration` 现在支持 ISO8601 格式化和解析。(Pull Request)
当 `parse_json_times` 启用时,`ActiveSupport::JSON.decode` 现在支持解析 ISO8601 本地时间。(Pull Request)
`ActiveSupport::JSON.decode` 现在为日期字符串返回 `Date` 对象。(Pull Request)
添加了 `TaggedLogging` 的功能,允许多次实例化日志记录器,以便它们不相互共享标签。(Pull Request)
11 致谢
查看Rails 贡献者完整列表,感谢所有花费无数时间使 Rails 成为稳定可靠框架的人。向他们致敬。