edge
更多資訊請參考 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 角色,則所有資料庫連線也會切換到讀取角色。現在在 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 非同步刪除關聯

非同步刪除關聯增加了應用程式在後台作業中刪除關聯的能力。這有助於在刪除數據時避免超時和其他性能問題。

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對象的支援。

  • 移除ActionView::Base#initialize中的已棄用format參數。

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

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

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

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

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

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

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

  • 移除已棄用的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

  • ActionView::Template#initialize中要求locals參數。

  • javascript_include_tagstylesheet_link_tag資源輔助程序生成了一個Link標頭,向現代瀏覽器提供有關預加載資源的提示。可以通過將config.action_view.preload_links_header設置為false來禁用此功能。

7 Action Mailer

詳細變更請參閱變更日誌

7.1 移除功能

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

詳細變更請參閱 Changelog

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

詳細變更請參閱 Changelog

10.1 移除功能

10.2 已棄用功能

10.3 重要變更

  • Active Model 的錯誤現在是具有介面的物件,允許應用程式更輕鬆地處理和交互模型拋出的錯誤。 此功能 包括查詢介面、更精確的測試和訪問錯誤詳細資訊。 主動支援 --------------

詳細更改請參閱變更日誌

10.4 刪除

  • 刪除當config.i18n.fallbacks為空時,不再回退到I18n.default_locale的過時回退。

  • 刪除過時的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=

10.5 過時

  • 過時的ActiveSupport::Multibyte::Unicode.default_normalization_form

10.6 重要更改

11 主動工作

詳細更改請參閱變更日誌

11.1 刪除

11.2 過時

  • 過時的config.active_job.return_false_on_aborted_enqueue

11.3 重要更改

  • 當排程工作被中止時,返回false

12 動作文字

詳細更改請參閱變更日誌

12.1 刪除

12.2 過時

12.3 重要更改

  • 通過在豐富文字屬性名稱後添加?來確認豐富文字內容是否存在的方法。 (拉取請求

  • 添加fill_in_rich_text_area系統測試案例輔助方法,以查找trix編輯器並填充指定的HTML內容。 (拉取請求

  • 添加ActionText::FixtureSet.attachment以在數據庫固定裝置中生成<action-text-attachment>元素。 (拉取請求

13 動作郵件箱

詳細更改請參閱變更日誌

13.1 刪除

13.2 過時

  • 過時的Rails.application.credentials.action_mailbox.api_keyMAILGUN_INGRESS_API_KEY,改用Rails.application.credentials.action_mailbox.signing_keyMAILGUN_INGRESS_SIGNING_KEY

13.3 重要更改

14 Ruby on Rails 指南

詳細更改請參閱變更日誌

14.1 重要更改

15 貢獻者

請參閱完整的 Rails 貢獻者列表,感謝所有花費許多時間使 Rails 成為穩定且強大的框架的人們。向他們致敬。

回饋

歡迎協助提升本指南的品質。

如果您發現任何錯別字或事實錯誤,請貢獻您的力量。 開始之前,您可以閱讀我們的 文件貢獻 部分。

您也可能會發現不完整的內容或過時的資訊。 請為主要的文件補充任何遺漏的內容。請先檢查 Edge 指南,以確認問題是否已經修復或尚未在主分支上修復。 請參考 Ruby on Rails 指南指引 以了解風格和慣例。

如果您發現需要修復但無法自行修補的問題,請 開啟一個問題

最後但同樣重要的是,關於 Ruby on Rails 文件的任何討論都非常歡迎在 官方 Ruby on Rails 論壇 上進行。