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 应用程序。这对于创建和提供类似于 X 或 GitHub 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 方法,并从数据库或控制器获取原始输入。这在进行自定义转换时很有用,例如货币数据。
查询
当调用 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。Ruby 2.2 不支持
debugger。(提交)移除了已废弃的
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。(拉取请求)废弃了
config.serve_static_files,改用config.public_file_server.enabled。(拉取请求)废弃了
rails任务命名空间中的任务,改用app命名空间。(例如,rails:update和rails:template任务重命名为app:update和app:template。)(拉取请求)
3.3. 显著变更
添加了 Rails 测试运行器
bin/rails test。(拉取请求)添加了
bin/rails restart任务,通过触摸tmp/restart.txt来重启您的 Rails 应用程序。(拉取请求)添加了
bin/rails initializers任务,用于打印出所有已定义的初始化器及其被 Rails 调用的顺序。(拉取请求)添加了
bin/rails dev:cache以在开发模式下启用或禁用缓存。(拉取请求)添加了
bin/update脚本以自动更新开发环境。(拉取请求)新应用程序在 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_to和respond_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选项。(提交)移除了
assigns和assert_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::IntegrationTest和ActionController::TestCase废弃了位置参数,改用关键字参数。(拉取请求)废弃了
:controller和:action路径参数。(拉取请求)废弃了控制器实例上的 env 方法。(提交)
ActionDispatch::ParamsParser已废弃并从中间件栈中移除。要配置参数解析器,请使用ActionDispatch::Request.parameter_parsers=。(提交,提交)
4.3. 显著变更
添加了
ActionController::Renderer以在控制器动作之外渲染任意模板。(拉取请求)在
ActionController::TestCase和ActionDispatch::IntegrationHTTP 请求方法中迁移到关键字参数语法。(拉取请求)向 Action Controller 添加了
http_cache_forever,因此我们可以缓存一个永不过期的响应。(拉取请求)提供更友好的请求变体访问方式。(拉取请求)
对于没有相应模板的动作,渲染
head :no_content而不是抛出错误。(拉取请求)添加了为控制器覆盖默认表单构建器的功能。(拉取请求)
添加了对仅 API 应用程序的支持。
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 默认生成弱 ETag。(拉取请求)
没有显式
render调用且没有相应模板的控制器操作将隐式渲染head :no_content,而不是抛出错误。(拉取请求 1,2)添加了每个表单 CSRF 令牌的选项。(拉取请求)
在集成测试中添加了请求编码和响应解析。(拉取请求)
添加
ActionController#helpers以在控制器级别访问视图上下文。(拉取请求)废弃的 flash 消息在存储到会话之前被移除。(拉取请求)
添加了对将记录集合传递给
fresh_when和stale?的支持。(拉取请求)ActionController::Live变成了ActiveSupport::Concern。这意味着它不能在不使用ActiveSupport::Concern或ActionController::Live扩展其他模块的情况下直接包含,否则在生产环境中将不起作用。有些人可能正在使用另一个模块来包含一些特殊的Warden/Devise身份验证失败处理代码,因为当使用ActionController::Live时,中间件无法捕获由生成线程抛出的:warden。(此问题中的更多详细信息)引入
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 添加了
_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。(提交)移除了已废弃的
has_many :through上的自动计数器缓存。(提交)移除了已废弃的
sanitize_sql_hash_for_conditions。(提交)移除了已废弃的
Reflection#source_macro。(提交)移除了已废弃的
symbolized_base_class和symbolized_sti_name。(提交)移除了已废弃的
ActiveRecord::Base.disable_implicit_join_references=。(提交)移除了已废弃的通过字符串访问器访问连接规范。(提交)
移除了已废弃的支持预加载依赖于实例的关联。(提交)
移除了对 PostgreSQL 具有独占下限范围的废弃支持。(提交)
移除了修改带有缓存 Arel 的关系时的废弃警告。这会改为引发
ImmutableRelation错误。(提交)从核心中移除了
ActiveRecord::Serialization::XmlSerializer。此功能已提取到 activemodel-serializers-xml gem 中。(拉取请求)从核心中移除了对旧版
mysql数据库适配器的支持。大多数用户应该能够使用mysql2。当找到维护者时,它将转换为单独的 gem。(拉取请求 1,拉取请求 2)移除了对
protected_attributesgem 的支持。(提交)移除了对 9.1 以下 PostgreSQL 版本的支持。(拉取请求)
移除了对
activerecord-deprecated_findersgem 的支持。(提交)移除了
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#tables、SchemaCache#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。(提交)
向
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_to的required选项,改用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_sources和connection.data_source_exists?。这些方法确定哪些关系可以支持 Active Record 模型(通常是表和视图)。(拉取请求)允许 fixtures 文件在 YAML 文件本身中设置模型类。(拉取请求)
添加了在生成数据库迁移时默认使用
uuid作为主键的功能。(拉取请求)添加了
ActiveRecord::Relation#left_joins和ActiveRecord::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. 移除
移除了已废弃的
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线程池。(拉取请求)将默认适配器从内联更改为异步。这是一个更好的默认值,因为测试将不再错误地依赖于同步发生的行为。(提交)
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的#yesterday和#tomorrow添加了#prev_day和#next_day对应方法。(拉取请求)添加了
SecureRandom.base58用于生成随机 base58 字符串。(提交)向
ActiveSupport::TestCase添加了file_fixture。它提供了一种简单的机制来访问测试用例中的示例文件。(拉取请求)向
Enumerable和Array添加了#without,用于返回不包含指定元素的枚举副本。(拉取请求)添加了
ActiveSupport::ArrayInquirer和Array#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_last和Array#third_to_last方法。(拉取请求)发布
ActiveSupport::Executor和ActiveSupport::ReloaderAPI,允许组件和库管理和参与应用程序代码的执行以及应用程序重载过程。(拉取请求)ActiveSupport::Duration现在支持 ISO8601 格式化和解析。(拉取请求)当
parse_json_times启用时,ActiveSupport::JSON.decode现在支持解析 ISO8601 本地时间。(拉取请求)ActiveSupport::JSON.decode现在为日期字符串返回Date对象。(拉取请求)添加了
TaggedLogging的功能,允许日志器多次实例化,以便它们不共享彼此的标签。(拉取请求)
11. 鸣谢
请参阅Rails 贡献者完整列表,感谢许多人花费大量时间使 Rails 成为一个稳定而健壮的框架。向他们所有人致敬。