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

Ruby on Rails 6.1 發行說明

Rails 6.1 的亮點

這些發行說明僅涵蓋主要變更。如需瞭解各種錯誤修正和變更,請參閱變更日誌或查看 GitHub 上 Rails 主要儲存庫中的提交清單

1 升級到 Rails 6.1

如果您要升級現有應用程式,在進行之前最好有良好的測試涵蓋率。如果您尚未升級到 Rails 6.0,也應該先升級,並確保您的應用程式在嘗試更新到 Rails 6.1 之前仍能如預期執行。升級時需要注意的事項清單可在升級 Ruby on Rails指南中找到。

2 主要功能

2.1 每個資料庫連線切換

Rails 6.1 提供您 切換每個資料庫連線 的功能。在 6.0 中,如果您切換到 reading 角色,則所有資料庫連線也會切換到 reading 角色。現在在 6.1 中,如果您在設定檔中將 legacy_connection_handling 設為 false,Rails 將允許您透過在對應的抽象類別上呼叫 connected_to 來切換單一資料庫的連線。

2.2 水平分片

Rails 6.0 提供了功能分區(多個分區、不同架構)資料庫的功能,但無法支援水平分片(相同架構、多個分區)。Rails 無法支援水平分片,因為 Active Record 中的模型每個角色每個類別只能有一個連線。現在已修復此問題,並提供 水平分片 與 Rails。

2.3 嚴格載入關聯

嚴格載入關聯 讓您可以確保所有關聯都急切載入,並在發生 N+1 之前停止。

2.4 委派類型

委派類型 是單一表格繼承的替代方案。這有助於表示類別階層,允許超類別是一個由其自己的表格表示的具體類別。每個子類別都有自己的表格,用於額外的屬性。

2.5 非同步刪除關聯

非同步刪除關聯 為應用程式新增在背景工作中 destroy 關聯的功能。在刪除資料時,這可以幫助您避免應用程式中的逾時和其他效能問題。

3 Railties

有關詳細變更,請參閱 變更日誌

3.1 移除

  • 移除已棄用的 rake notes 任務。

  • 移除 rails dbconsole 指令中已棄用的 connection 選項。

  • 移除 rails notes 中已棄用的 SOURCE_ANNOTATION_DIRECTORIES 環境變數支援。

  • 移除 rails server 指令中已棄用的 server 參數。

  • 移除已棄用,使用 HOST 環境變數來指定伺服器 IP 的支援。

  • 移除已棄用的 rake dev:cache 任務。

  • 移除已棄用的 rake routes 任務。

  • 移除已棄用的 rake initializers 任務。

3.2 棄用

3.3 顯著變更

4 Action Cable

有關詳細變更,請參閱 變更日誌

4.1 移除

4.2 棄用

4.3 顯著變更

5 Action Pack

有關詳細變更,請參閱 變更日誌

5.1 移除

  • 移除已棄用的 ActionDispatch::Http::ParameterFilter

  • 移除控制器層級已棄用的 force_ssl

5.2 棄用

  • 棄用 config.action_dispatch.return_only_media_type_on_content_type

5.3 顯著變更

  • 變更 ActionDispatch::Response#content_type 以傳回完整的 Content-Type 標頭。

6 Action View

有關詳細變更,請參閱 變更日誌

6.1 移除

  • 移除 ActionView::Template::Handlers::ERB 中已棄用的 escape_whitelist

  • ActionView::Resolver 中移除已棄用的 find_all_anywhere

  • ActionView::Template::HTML 中移除已棄用的 formats

  • ActionView::Template::RawFile 中移除已棄用的 formats

  • ActionView::Template::Text 中移除已棄用的 formats

  • ActionView::PathSet 中移除已棄用的 find_file

  • ActionView::LookupContext 中移除已棄用的 rendered_format

  • ActionView::ViewPaths 中移除已棄用的 find_file

  • 移除已棄用的支援,在 ActionView::Base#initialize 中傳遞一個不是 ActionView::LookupContext 的物件作為第一個引數。

  • 移除已棄用的 format 引數 ActionView::Base#initialize

  • 移除已棄用的 ActionView::Template#refresh

  • 移除已棄用的 ActionView::Template#original_encoding

  • 移除已棄用的 ActionView::Template#variants

  • 移除已棄用的 ActionView::Template#formats

  • 移除已棄用的 ActionView::Template#virtual_path=

  • 移除已棄用的 ActionView::Template#updated_at

  • 移除已棄用的 updated_at 引數,在 ActionView::Template#initialize 中需要。

  • 移除已棄用的 ActionView::Template.finalize_compiled_template_methods

  • 移除已棄用的 config.action_view.finalize_compiled_template_methods

  • 移除已棄用的支援,使用區塊呼叫 ActionView::ViewPaths#with_fallback

  • 移除已棄用的支援,傳遞絕對路徑給 render template:

  • 移除已棄用的支援,傳遞相對路徑給 render file:

  • 移除對不接受兩個引數的範本處理常式的支援。

  • 移除已棄用的 ActionView::Template::PathResolver 中的模式引數。

  • 移除已棄用的支援,從某些檢視輔助程式中的物件呼叫私人方法。

6.2 已棄用

6.3 顯著變更

  • 要求 ActionView::Base 子類別實作 #compiled_method_container

  • locals 參數成為 ActionView::Template#initialize 的必要參數。

  • javascript_include_tagstylesheet_link_tag 資源輔助函式會產生一個 Link 標頭,提供提示給現代瀏覽器,用於預載資源。這可以透過將 config.action_view.preload_links_header 設定為 false 來停用。

7 Action Mailer

請參閱 變更日誌 以取得詳細變更內容。

7.1 移除

  • 移除已棄用的 ActionMailer::Base.receive,改用 Action Mailbox

7.2 已棄用

7.3 顯著變更

8 Active Record

請參閱 變更日誌 以取得詳細變更內容。

8.1 移除

  • ActiveRecord::ConnectionAdapters::DatabaseLimits 移除已棄用的方法。

    column_name_length table_name_length columns_per_table indexes_per_table columns_per_multicolumn_index sql_query_length joins_per_query

  • 移除已棄用的 ActiveRecord::ConnectionAdapters::AbstractAdapter#supports_multi_insert?

  • 移除已棄用的 ActiveRecord::ConnectionAdapters::AbstractAdapter#supports_foreign_keys_in_create?

  • 移除已棄用的 ActiveRecord::ConnectionAdapters::PostgreSQLAdapter#supports_ranges?

  • 移除已棄用的 ActiveRecord::Base#update_attributesActiveRecord::Base#update_attributes!

  • ActiveRecord::ConnectionAdapter::SchemaStatements#assume_migrated_upto_version 移除已棄用的 migrations_path 參數。

  • 移除已棄用的 config.active_record.sqlite3.represent_boolean_as_integer

  • ActiveRecord::DatabaseConfigurations 移除已棄用的方法。

    fetch each first values []=

  • 移除已棄用的 ActiveRecord::Result#to_hash 方法。

  • 移除已棄用的 ActiveRecord::Relation 方法中使用不安全原始 SQL 的支援。

8.2 已棄用

  • 已棄用 ActiveRecord::Base.allow_unsafe_raw_sql

  • 已棄用 connected_to 上的 database 關鍵字參數。

  • legacy_connection_handling 設為 false 時,已棄用 connection_handlers

8.3 顯著變更

  • MySQL:唯一性驗證器現在會遵循預設資料庫排序規則,預設不再強制執行大小寫敏感的比對。

  • relation.create 不會再在初始化區塊和回呼中向類別層級查詢方法洩漏範圍。

    之前

    User.where(name: "John").create do |john|
      User.find_by(name: "David") # => nil
    end
    

    之後

    User.where(name: "John").create do |john|
      User.find_by(name: "David") # => #<User name: "David", ...>
    end
    
  • 命名範圍鏈不再會向類別層級查詢方法洩漏範圍。

    class User < ActiveRecord::Base
      scope :david, -> { User.where(name: "David") }
    end
    

    之前

    User.where(name: "John").david
    # SELECT * FROM users WHERE name = 'John' AND name = 'David'
    

    之後

    User.where(name: "John").david
    # SELECT * FROM users WHERE name = 'David'
    
  • where.not 現在會產生 NAND 謂詞,而非 NOR。

    之前

    User.where.not(name: "Jon", role: "admin")
    # SELECT * FROM users WHERE name != 'Jon' AND role != 'admin'
    

    之後

    User.where.not(name: "Jon", role: "admin")
    # SELECT * FROM users WHERE NOT (name = 'Jon' AND role = 'admin')
    
  • 若要使用新的每個資料庫連線處理,應用程式必須將 legacy_connection_handling 變更為 false,並移除 connection_handlers 上已棄用的存取器。connects_toconnected_to 的公開方法不需要變更。

9 Active Storage

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

9.1 已移除

  • 已移除已棄用的支援,以將 :combine_options 作業傳遞給 ActiveStorage::Transformers::ImageProcessing

  • 已移除已棄用的 ActiveStorage::Transformers::MiniMagickTransformer

  • 已移除已棄用的 config.active_storage.queue

  • 已移除已棄用的 ActiveStorage::Downloading

9.2 已棄用

  • 已棄用 Blob.create_after_upload,改用 Blob.create_and_upload。(Pull Request)

9.3 顯著變更

  • 已新增 Blob.create_and_upload,以建立新的 blob 並將指定的 io 上傳至服務。(Pull Request)
  • 已新增 ActiveStorage::Blob#service_name 欄位。升級後必須執行遷移。執行 bin/rails app:update 以產生該遷移。

10 Active Model

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

10.1 移除

10.2 棄用

10.3 顯著變更

  • Active Model 的錯誤現在是具有介面的物件,讓您的應用程式可以更輕鬆地處理和互動模型所擲回的錯誤。 此功能 包含查詢介面,能進行更精確的測試,並存取錯誤詳細資料。

11 Active Support

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

11.1 移除

  • 移除已棄用的回退至 I18n.default_locale,當 config.i18n.fallbacks 為空時。

  • 移除已棄用的 LoggerSilence 常數。

  • 移除已棄用的 ActiveSupport::LoggerThreadSafeLevel#after_initialize

  • 移除已棄用的 Module#parent_nameModule#parentModule#parents

  • 移除已棄用的檔案 active_support/core_ext/module/reachable

  • 移除已棄用的檔案 active_support/core_ext/numeric/inquiry

  • 移除已棄用的檔案 active_support/core_ext/array/prepend_and_append

  • 移除已棄用的檔案 active_support/core_ext/hash/compact

  • 移除已棄用的檔案 active_support/core_ext/hash/transform_values

  • 移除已棄用的檔案 active_support/core_ext/range/include_range

  • 移除已棄用的 ActiveSupport::Multibyte::Chars#consumes?ActiveSupport::Multibyte::Chars#normalize

  • 移除已棄用的 ActiveSupport::Multibyte::Unicode.pack_graphemesActiveSupport::Multibyte::Unicode.unpack_graphemesActiveSupport::Multibyte::Unicode.normalizeActiveSupport::Multibyte::Unicode.downcaseActiveSupport::Multibyte::Unicode.upcaseActiveSupport::Multibyte::Unicode.swapcase

  • 移除已棄用的 ActiveSupport::Notifications::Instrumenter#end=

11.2 棄用

  • 棄用 ActiveSupport::Multibyte::Unicode.default_normalization_form

11.3 顯著變更

12 Active Job

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

12.1 移除

12.2 已棄用

  • 已棄用 config.active_job.return_false_on_aborted_enqueue

12.3 顯著變更

  • 在中斷排程工作時傳回 false

13 Action Text

請參閱 變更日誌 以取得詳細變更內容。

13.1 移除

13.2 已棄用

13.3 顯著變更

  • 新增方法,在富文字屬性的名稱後加上 ?,以確認富文字內容是否存在。(Pull Request

  • 新增 fill_in_rich_text_area 系統測試案例輔助工具,以尋找 trix 編輯器並填入指定的 HTML 內容。(Pull Request

  • 新增 ActionText::FixtureSet.attachment,以在資料庫固定裝置中產生 <action-text-attachment> 元素。(Pull Request

14 Action Mailbox

請參閱 變更日誌 以取得詳細變更內容。

14.1 移除

14.2 已棄用

  • 已棄用 Rails.application.credentials.action_mailbox.api_keyMAILGUN_INGRESS_API_KEY,改用 Rails.application.credentials.action_mailbox.signing_keyMAILGUN_INGRESS_SIGNING_KEY

14.3 顯著變更

15 Ruby on Rails 指南

請參閱 變更日誌 以取得詳細變更內容。

15.1 顯著變更

16 致謝

請參閱 Rails 貢獻者完整清單,以了解許多人花費許多時間,讓 Rails 成為穩定且強大的架構。向所有這些人致敬。

意見回饋

我們鼓勵您協助提升本指南的品質。

如果您發現任何錯字或事實錯誤,請協助我們修正。首先,您可以閱讀我們的 文件貢獻 章節。

您也可能會發現內容不完整或已過時。請務必新增任何主程式遺失的說明文件。請務必先查看Edge Guides,以驗證問題是否已在主分支中修復。查看Ruby on Rails 指南準則,了解樣式和慣例。

如果您發現需要修復但無法自行修補的任何原因,請開啟問題

最後但並非最不重要的一點是,歡迎在官方 Ruby on Rails 論壇上針對 Ruby on Rails 說明文件進行任何討論。