1 升級至 Rails 5.0
如果您要升級現有應用程式,在進行之前,最好先有良好的測試涵蓋範圍。如果您尚未升級至 Rails 4.2,您也應該先升級至 Rails 4.2,並在嘗試更新至 Rails 5.0 之前,確保您的應用程式仍如預期般執行。您可以在 升級 Ruby on Rails 指南中找到升級時需要注意的事項清單。
2 主要功能
2.1 Action Cable
Action Cable 是 Rails 5 中的新架構。它能將 WebSocket 與您的其他 Rails 應用程式無縫整合。
Action Cable 允許使用 Ruby 編寫即時功能,其樣式和形式與您的其他 Rails 應用程式相同,同時仍能保持效能和可擴充性。它是一個全端堆疊產品,同時提供用戶端 JavaScript 架構和伺服器端 Ruby 架構。您可以存取使用 Active Record 或您選擇的 ORM 編寫的完整網域模型。
請參閱 Action Cable 概觀 指南以取得更多資訊。
2.2 API 應用程式
Rails 現在可用於建立精簡的僅 API 應用程式。這對於建立和提供類似於 Twitter 或 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 查詢時,指定如何轉換值。
Dirty 追蹤
屬性的類型允許變更 Dirty 追蹤執行的模式。
請參閱其 文件 以取得詳細的說明。
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
。(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
。(提交,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)為新應用程式啟用 HSTS,並包含 IncludeSubdomains 標頭。(Pull Request)
應用程式產生器會撰寫一個新的檔案
config/spring.rb
,指示 Spring 監控其他常見檔案。(commit)新增
--skip-action-mailer
,用於在產生新應用程式時略過 Action Mailer。(Pull Request)移除
tmp/sessions
目錄及其關聯的 clear rake 任務。(Pull Request)將 scaffold 產生器產生的
_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):nothing
選項已於render
方法中棄用。(Pull Request)將第一個參數傳遞為
Hash
和head
方法的預設狀態碼已棄用。(Pull Request)使用字串或符號表示中間件類別名稱已棄用。請改用類別名稱。(commit)
透過常數(例如
Mime::HTML
)存取 MIME 類型已棄用。請改用符號的底線運算子(例如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 預設產生弱 ETags。(Pull Request)
沒有明確
render
呼叫且沒有對應範本的控制器動作,將隱含地呈現head :no_content
,而不是引發錯誤。(Pull Request 1、2)新增每個表單 CSRF 令牌的選項。(Pull Request)
新增整合測試的請求編碼和回應剖析。(Pull Request)
新增
ActionController#helpers
來取得控制器層級的檢視內容。(Pull Request)捨棄的快閃訊息會在儲存到 session 之前移除。(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
。(提交)移除
ActionView::Helpers::RecordTagHelper
,此功能已萃取至 record_tag_helper gem。(Pull Request)移除
translate
輔助函式的:rescue_format
選項,因為 I18n 已不再支援此選項。(Pull Request)
5.2 顯著變更
將預設範本處理程式從
ERB
變更為Raw
。(提交)集合呈現可以快取並一次擷取多個部分。(Pull Request, 提交)
新增萬用字元比對至明確依賴關係。(Pull Request)
將
disable_with
設定為提交標籤的預設行為。在提交時停用按鈕,以防止重複提交。(Pull Request)部分範本名稱不再需要是有效的 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
。(提交)已移除對
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 程式集。(Pull Request)已從核心移除對舊版
mysql
資料庫轉接器的支援。大多數使用者應該可以使用mysql2
。當我們找到維護者時,它將轉換為一個獨立的程式集。(Pull Request 1, Pull Request 2)已移除對
protected_attributes
程式集的支援。(提交)已移除對 9.1 以下版本 PostgreSQL 的支援。(Pull Request)
已移除對
activerecord-deprecated_finders
寶石的支持。(提交)已移除
ActiveRecord::ConnectionAdapters::Column::TRUE_VALUES
常數。(提交)
7.2 棄用
已棄用在查詢中將類別傳遞為值。使用者應改為傳遞字串。(Pull Request)
已棄用傳回
false
作為停止 Active Record 回呼鏈的方式。建議的方式是throw(:abort)
。(Pull Request)已棄用
ActiveRecord::Base.errors_in_transactional_callbacks=
。(提交)已棄用
Relation#uniq
,請改用Relation#distinct
。(提交)已棄用 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 顯著變更
在建立表格時,已新增一個
foreign_key
選項至references
。(commit)新的屬性 API。(commit)
已新增
:_prefix
/:_suffix
選項至enum
定義。(Pull Request,Pull Request)已新增
#cache_key
至ActiveRecord::Relation
。(Pull Request)已將
timestamps
的預設null
值變更為false
。(commit)已新增
ActiveRecord::SecureToken
以封裝使用SecureRandom
為模型中屬性產生唯一令牌。(Pull Request)已新增
:if_exists
選項至drop_table
。(Pull Request)新增
ActiveRecord::Base#accessed_fields
,當您只想從資料庫中選取需要的資料時,可以使用此功能快速找出從模型中讀取的欄位。(提交)在
ActiveRecord::Relation
中新增#or
方法,允許使用 OR 運算子來組合 WHERE 或 HAVING 子句。(提交)新增
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)允許固定裝置檔案在 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)新增
:touch
選項到save
方法,讓記錄可以在不更新時間戳記的情況下儲存。(Pull Request)新增 PostgreSQL 的表達式索引和運算子類別支援。(commit)
新增
:index_errors
選項,將索引新增到嵌套屬性的錯誤中。(Pull Request)新增對雙向刪除依賴項的支援。(Pull Request)
新增對交易測試中
after_commit
回呼函式的支援。(Pull Request)新增
foreign_key_exists?
方法,用於查看資料表上是否存在外來鍵。(Pull Request)新增
:time
選項到touch
方法,讓記錄可以觸發與目前時間不同的時間。(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 寶石中。(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
變更為接受true
作為預設值,除了1
之外。(Pull Request)
9 Active Job
請參閱 Changelog 以取得詳細變更。
9.1 顯著變更
ActiveJob::Base.deserialize
委派給工作類別。這允許工作在序列化時附加任意元資料,並在執行時讀回這些元資料。(Pull Request)新增在不影響彼此的情況下,針對每個工作設定佇列適配器的功能。(Pull Request)
現在,預設情況下,產生的工作會繼承自
app/jobs/application_job.rb
。(Pull Request)允許
DelayedJob
、Sidekiq
、qu
、que
和queue_classic
將工作 ID 回報給ActiveJob::Base
作為provider_job_id
。(Pull Request、Pull Request、commit)實作一個簡單的
AsyncJob
處理器和相關的AsyncAdapter
,將工作排隊到concurrent-ruby
執行緒池。(Pull Request)將預設的 adapter 從內聯式變更為非同步式。這是一個更好的預設值,因為測試不會錯誤地依賴於同步發生的行為。(commit)
10 Active Support
請參閱 Changelog 以取得詳細變更。
10.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)
10.2 已棄用
已棄用的
MissingSourceFile
,建議使用LoadError
。(提交)已棄用的
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, 提交)已棄用的
ActiveSupport::Cache::LocaleCache#set_cache_value
,建議使用write_cache_value
。(Pull Request)已棄用傳遞參數給
assert_nothing_raised
。(Pull Request)已棄用的
Module.local_constants
,建議使用Module.constants(false)
。(Pull Request)
10.3 顯著變更
已新增
#verified
和#valid_message?
方法到ActiveSupport::MessageVerifier
。(Pull Request)變更了暫停回呼鏈的方法。從現在開始,暫停回呼鏈的首選方法是明確地
throw(:abort)
。(Pull Request)新的設定選項
config.active_support.halt_callback_chains_on_return_false
,用來指定 ActiveRecord、ActiveModel 和 ActiveModel::Validations 回呼鏈是否可以在「before」回呼中傳回false
來暫停。(Pull Request)已將預設測試順序從
:sorted
變更為:random
。(提交)已新增
#on_weekend?
、#on_weekday?
、#next_weekday
、#prev_weekday
方法到Date
、Time
和DateTime
。(Pull Request, Pull Request)新增
same_time
選項至Date
、Time
和DateTime
的#next_week
和#prev_week
。(Pull Request)新增
#prev_day
和#next_day
對應項目至Date
、Time
和DateTime
的#yesterday
和#tomorrow
。(Pull Request)新增
SecureRandom.base58
以產生隨機 base58 字串。(commit)新增
file_fixture
至ActiveSupport::TestCase
。它提供一個簡單的機制,讓您可以在測試案例中存取範例檔案。(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
取得方法,如果值為.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
方法。(Pull Request)發布
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 成為一個穩定且強健的架構。向他們所有人致敬。
意見回饋
我們鼓勵您協助提升本指南的品質。
如果您看到任何錯字或事實錯誤,請貢獻您的意見。要開始,您可以閱讀我們的 文件貢獻 部分。
您也可能會發現不完整或過時的內容。請為 main 新增任何遺漏的文件。請務必先查看 Edge Guides,以驗證問題是否已在 main 分支修復。查看 Ruby on Rails 指南準則,了解樣式和慣例。
如果您發現需要修正的地方,但無法自行修補,請開啟問題。
最後但並非最不重要的一點,歡迎在官方 Ruby on Rails 論壇上針對 Ruby on Rails 文件進行任何類型的討論。