v7.1.3.2
更多資訊請參閱 rubyonrails.org: 更多 Ruby on Rails

Ruby on Rails 5.0 版本說明

Rails 5.0 的重點

這些版本說明僅涵蓋重大變更。如需了解各種錯誤修正和變更,請參閱變更記錄或查看 GitHub 上 Rails 主要儲存庫中的提交清單

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 應用程式。這對於建立和提供類似於 TwitterGitHub 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]}

建立自訂型別

您可以定義自己的自訂型別,只要它們對值型別上定義的方法有回應即可。方法 deserializecast 會在您的型別物件上呼叫,其中包含來自資料庫或控制器中的原始輸入。這很有用,例如在執行自訂轉換(例如金錢資料)時。

查詢

呼叫 ActiveRecord::Base.where 時,它會使用模型類別定義的型別將值轉換為 SQL,並在您的型別物件上呼叫 serialize

這讓物件有能力在執行 SQL 查詢時,指定如何轉換值。

Dirty 追蹤

屬性的類型允許變更 Dirty 追蹤執行的模式。

請參閱其 文件 以取得詳細的說明。

2.4 測試執行器

已導入一個新的測試執行器,以增強從 Rails 執行測試的能力。若要使用此測試執行器,只需輸入 bin/rails test

測試執行器受到 RSpecminitest-reportersmaxitest 等的啟發。它包含一些顯著的進展

  • 使用測試的行號執行單一測試。
  • 執行多個測試,精確到測試的行號。
  • 改進的失敗訊息,也增加了重新執行失敗測試的容易性。
  • 使用 -f 選項快速失敗,在發生失敗時立即停止測試,而不是等待套件完成。
  • 使用 -d 選項,將測試輸出延後到完整測試執行結束時。
  • 使用 -b 選項,完成例外堆疊追蹤輸出。
  • 與 minitest 整合,允許使用 -s(測試種子資料)、-n(依名稱執行特定測試)、-v(更好的詳細輸出)等選項。
  • 有顏色的測試輸出。

3 Railties

請參閱 變更紀錄 以取得詳細變更。

3.1 移除

  • 移除偵錯器支援,改用 byebug。Ruby 2.2 不支援 debugger。(提交

  • 移除已棄用的 test:alltest:all:db 任務。(提交

  • 移除已棄用的 Rails::Rack::LogTailer。(提交

  • 已移除已棄用的 RAILS_CACHE 常數。(提交

  • 已移除已棄用的 serve_static_assets 設定。(提交

  • 已移除文件說明工作 doc:appdoc:railsdoc: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:updaterails:template 工作已重新命名為 app:updateapp: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_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)

  • :nothing 選項已於 render 方法中棄用。(Pull Request

  • 將第一個參數傳遞為 Hashhead 方法的預設狀態碼已棄用。(Pull Request

  • 使用字串或符號表示中間件類別名稱已棄用。請改用類別名稱。(commit

  • 透過常數(例如 Mime::HTML)存取 MIME 類型已棄用。請改用符號的底線運算子(例如 Mime[:html])。(Pull Request

  • redirect_to :back 已棄用,建議使用 redirect_back,它接受必要的 fallback_location 參數,從而消除了 RedirectBackError 的可能性。(Pull Request

  • ActionDispatch::IntegrationTestActionController::TestCase 棄用位置參數,建議使用關鍵字參數。(Pull Request

  • :controller:action 路徑參數已棄用。(Pull Request

  • 控制器實例上的 env 方法已棄用。(commit

  • ActionDispatch::ParamsParser 已棄用,並已從中間件堆疊中移除。若要設定參數解析器,請使用 ActionDispatch::Request.parameter_parsers=。(commitcommit

4.3 顯著變更

  • 新增 ActionController::Renderer,以在控制器動作之外呈現任意範本。(Pull Request

  • ActionController::TestCaseActionDispatch::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_sslconfig.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 12

  • 新增每個表單 CSRF 令牌的選項。(Pull Request

  • 新增整合測試的請求編碼和回應剖析。(Pull Request

  • 新增 ActionController#helpers 來取得控制器層級的檢視內容。(Pull Request

  • 捨棄的快閃訊息會在儲存到 session 之前移除。(Pull Request

  • 新增支援將記錄集合傳遞給 fresh_whenstale?。(Pull Request)

  • ActionController::Live 已成為 ActiveSupport::Concern。這表示它不能只包含在其他模組中,而必須使用 ActiveSupport::ConcernActionController::Live 延伸這些模組,否則在生產環境中不會生效。有些人可能會使用另一個模組來包含一些特殊的 Warden/Devise 驗證失敗處理程式碼,因為中間件無法捕捉由衍生執行緒引發的 :warden,而這正是使用 ActionController::Live 時會遇到的情況。(在此議題中取得更多詳細資料)

  • 引入 Response#strong_etag=#weak_etag=,以及 fresh_whenstale? 的類似選項。(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 移 除

  • 已移除電子郵件檢視中的已棄用 *_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。(提交)

  • 已移除對 has_many :through 的不建議使用自動計數快取。(提交)

  • 已移除不建議使用的 sanitize_sql_hash_for_conditions。(提交)

  • 已移除不建議使用的 Reflection#source_macro。(提交)

  • 已移除不建議使用的 symbolized_base_classsymbolized_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 物件,而非 ArrayPull 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

  • 已棄用將 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

  • 已新增一個選項 endfind_in_batches,它與 start 參數互補,用於指定要停止批次處理的位置。(Pull Request

7.3 顯著變更

  • 在建立表格時,已新增一個 foreign_key 選項至 references。(commit

  • 新的屬性 API。(commit

  • 已新增 :_prefix/:_suffix 選項至 enum 定義。(Pull RequestPull Request

  • 已新增 #cache_keyActiveRecord::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_torequired 選項,改用 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_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

  • 新增 :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 移除

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 變更為接受 true 作為預設值,除了 1 之外。(Pull Request

9 Active Job

請參閱 Changelog 以取得詳細變更。

9.1 顯著變更

  • ActiveJob::Base.deserialize 委派給工作類別。這允許工作在序列化時附加任意元資料,並在執行時讀回這些元資料。(Pull Request

  • 新增在不影響彼此的情況下,針對每個工作設定佇列適配器的功能。(Pull Request

  • 現在,預設情況下,產生的工作會繼承自 app/jobs/application_job.rb。(Pull Request

  • 允許 DelayedJobSidekiqququequeue_classic 將工作 ID 回報給 ActiveJob::Base 作為 provider_job_id。(Pull RequestPull Requestcommit

  • 實作一個簡單的 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

  • 移除已棄用的方法來自 Kernelsilence_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

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_keyActiveSupport::Cache::MemCachedStore#escape_keyActiveSupport::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 方法到 DateTimeDateTime。(Pull Request, Pull Request)

  • 新增 same_time 選項至 DateTimeDateTime#next_week#prev_week。(Pull Request

  • 新增 #prev_day#next_day 對應項目至 DateTimeDateTime#yesterday#tomorrow。(Pull Request

  • 新增 SecureRandom.base58 以產生隨機 base58 字串。(commit

  • 新增 file_fixtureActiveSupport::TestCase。它提供一個簡單的機制,讓您可以在測試案例中存取範例檔案。(Pull Request

  • 新增 EnumerableArray 上的 #without,以傳回一個可列舉物件的副本,但不包含指定的元素。(Pull Request

  • 新增 ActiveSupport::ArrayInquirerArray#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_lastArray#third_to_last 方法。(Pull Request

  • 發布 ActiveSupport::ExecutorActiveSupport::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 文件進行任何類型的討論。