更多資訊請至 rubyonrails.org:

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 提供了以功能性方式分割 (多個分割區、不同的 schema) 資料庫的能力,但無法支援水平分片 (相同的 schema、多個分割區)。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 的物件當作第一個引數傳遞的已棄用支援。

  • 移除 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 中已棄用的 pattern 引數。

  • 移除在某些視圖輔助方法中,從物件呼叫私有方法的已棄用支援。

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 kwarg。

  • 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 移除

  • 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=

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 以在資料庫 fixture 中產生 <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 成為穩定且強大的框架的人。感謝所有他們。



回到頂端