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 的应用程序。这对于创建和提供类似于 Twitter 或 GitHub 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]}
创建自定义类型:
您可以定义自己的自定义类型,只要它们响应于值类型上定义的方法。方法deserialize
或cast
将在您的类型对象上调用,使用来自数据库或控制器的原始输入。这在进行自定义转换时非常有用,比如货币数据。
查询:
当调用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
任务。 (commit)移除了已弃用的
Rails::Rack::LogTailer
。 (commit)移除了已弃用的
RAILS_CACHE
常量。 (commit)移除了已弃用的
serve_static_assets
配置。 (commit)移除了文档任务
doc:app
、doc:rails
和doc: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: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
在生产环境中将日志记录到 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_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
,改用接受必需的fallback_location
参数的redirect_back
,从而消除了RedirectBackError
的可能性。 (Pull Request)ActionDispatch::IntegrationTest
和ActionController::TestCase
弃用了位置参数,改用关键字参数。 (Pull Request)弃用了
controller
和action
路径参数。 (Pull Request)弃用了控制器实例上的env方法。 (commit)
ActionDispatch::ParamsParser
已弃用并从中间件堆栈中移除。要配置参数解析器,请使用ActionDispatch::Request.parameter_parsers=
。 (commit, commit)重要更改
添加了
ActionController::Renderer
,用于在控制器操作之外渲染任意模板。 (拉取请求)在
ActionController::TestCase
和ActionDispatch::Integration
的HTTP请求方法中迁移到关键字参数语法。 (拉取请求)在Action Controller中添加了
http_cache_forever
,以便我们可以缓存永不过期的响应。 (拉取请求)提供更友好的请求变体访问方式。 (拉取请求)
对于没有对应模板的操作,渲染
head :no_content
而不是引发错误。 (拉取请求)添加了在控制器中覆盖默认表单构建器的功能。 (拉取请求)
添加了对API-only应用程序的支持。
ActionController::API
被添加为这种类型应用程序的ActionController::Base
替代品。 (拉取请求)ActionController::Parameters
不再继承自HashWithIndifferentAccess
。 (拉取请求)通过使
config.force_ssl
和config.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_when
和stale?
的支持。 (拉取请求)ActionController::Live
成为了ActiveSupport::Concern
。这意味着它不能只被包含在其他模块中,而不扩展它们为ActiveSupport::Concern
或ActionController::Live
在生产环境中将不起作用。一些人可能还使用另一个模块来包含一些特殊的Warden
/Devise
身份验证失败处理代码,因为中间件无法捕获由生成的线程抛出的:warden
,而在使用ActionController::Live
时正是这种情况。 (在此问题中了解更多详情)引入
Response#strong_etag=
和#weak_etag=
以及fresh_when
和stale?
的类似选项。 (拉取请求)
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 删除
6.2 显著更改
模板查找现在遵循默认语言环境和I18n回退。 (提交)
通过生成器创建的邮件程序现在添加了
_mailer
后缀,遵循控制器和作业中使用的相同命名约定。 (拉取请求)添加了
assert_enqueued_emails
和assert_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_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)从核心中移除了对旧版
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)弃用了向
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_sources
和connection.data_source_exists?
方法。 这些方法确定可以用于支持Active Record模型的关系(通常是表和视图)。 (Pull Request)允许夹具文件在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进行了版本化,以便我们可以更改参数默认值而不会破坏现有的迁移, 或者迫使它们通过废弃周期进行重写。 (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 删除
删除了已弃用的
ActiveModel::Dirty#reset_#{attribute}
和ActiveModel::Dirty#reset_changes
。 (Pull Request)删除了 XML 序列化功能。此功能已提取到 activemodel-serializers-xml gem 中。 (Pull Request)
删除了
ActionController::ModelNaming
模块。 (Pull Request)
8.2 弃用
弃用了将
false
作为阻止 Active Model 和ActiveModel::Validations
回调链的方式。推荐的方式是使用throw(:abort)
。 (Pull Request)弃用了具有不一致行为的
ActiveModel::Errors#get
、ActiveModel::Errors#set
和ActiveModel::Errors#[]=
方法。 (Pull Request)弃用了
validates_length_of
的:tokenizer
选项,改用纯 Ruby。 (Pull Request)弃用了
ActiveModel::Errors#add_on_empty
和ActiveModel::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)允许
DelayedJob
、Sidekiq
、qu
、que
和queue_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_stderr
、silence_stream
、capture
和quietly
。 (commit)移除了已弃用的
active_support/core_ext/big_decimal/yaml_conversions
文件。 (commit)移除了已弃用的方法
ActiveSupport::Cache::Store.instrument
和ActiveSupport::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_key
、ActiveSupport::Cache::MemCachedStore#escape_key
和ActiveSupport::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)在
Date
、Time
和DateTime
中添加了#on_weekend?
、#on_weekday?
、#next_weekday
和#prev_weekday
方法。(Pull Request、Pull Request)在
Date
、Time
和DateTime
的#next_week
和#prev_week
中添加了same_time
选项。(Pull Request)在
Date
、Time
和DateTime
中添加了#prev_day
和#next_day
方法,作为#yesterday
和#tomorrow
的对应方法。(Pull Request)添加了
SecureRandom.base58
用于生成随机的base58字符串。(commit)在
ActiveSupport::TestCase
中添加了file_fixture
。它提供了一种在测试用例中访问示例文件的简单机制。(Pull Request)在
Enumerable
和Array
上添加了#without
方法,用于返回不包含指定元素的可枚举对象的副本。(Pull Request)添加了
ActiveSupport::ArrayInquirer
和Array#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_last
和Array#third_to_last
方法。 (拉取请求)发布了
ActiveSupport::Executor
和ActiveSupport::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 文档的任何问题。