更多資訊請見 rubyonrails.org:

1 升級至 Rails 7.0

如果您要升級現有的應用程式,最好在開始之前先有良好的測試覆蓋率。您也應該先升級到 Rails 6.1(如果您還沒有),並在嘗試更新到 Rails 7.0 之前,確認您的應用程式仍然可以如預期般執行。升級時需要注意的事項清單可在升級 Ruby on Rails指南中找到。

2 主要功能

3 Railties

詳細變更請參考變更日誌

3.1 移除

  • 移除 dbconsole 中已棄用的 config

3.2 棄用

3.3 重大變更

  • Sprockets 現在是可選的相依性

    gem rails 不再相依於 sprockets-rails。如果您的應用程式仍然需要使用 Sprockets,請務必將 sprockets-rails 新增到您的 Gemfile 中。

    gem "sprockets-rails"
    

4 Action Cable

詳細變更請參考變更日誌

4.1 移除

4.2 棄用

4.3 重大變更

5 Action Pack

詳細變更請參考變更日誌

5.1 移除

  • 移除已棄用的 ActionDispatch::Response.return_only_media_type_on_content_type

  • 移除已棄用的 Rails.config.action_dispatch.hosts_response_app

  • 移除已棄用的 ActionDispatch::SystemTestCase#host!

  • 移除已棄用支援傳遞相對於 fixture_path 的路徑到 fixture_file_upload

5.2 棄用

5.3 重大變更

6 Action View

詳細變更請參考變更日誌

6.1 移除

  • 移除已棄用的 Rails.config.action_view.raise_on_missing_translations

6.2 棄用

6.3 重大變更

  • 如果物件用於建構 URL,則 button_to 會從 Active Record 物件推斷 HTTP 動詞 [method]

    button_to("Do a POST", [:do_post_action, Workshop.find(1)])
    # Before
    #=>   <input type="hidden" name="_method" value="post" autocomplete="off" />
    # After
    #=>   <input type="hidden" name="_method" value="patch" autocomplete="off" />
    

7 Action Mailer

詳細變更請參考變更日誌

7.1 移除

  • 移除已棄用的 ActionMailer::DeliveryJobActionMailer::Parameterized::DeliveryJob,改用 ActionMailer::MailDeliveryJob

7.2 棄用

7.3 重大變更

8 Active Record

詳細變更請參考變更日誌

8.1 移除

  • 移除 connected_to 中已棄用的 database kwarg。

  • 移除已棄用的 ActiveRecord::Base.allow_unsafe_raw_sql

  • 移除 configs_for 方法中已棄用的選項 :spec_name

  • 移除已棄用支援在 Rails 4.2 和 4.1 格式中載入 YAML ActiveRecord::Base 實例。

  • 當在 PostgreSQL 資料庫中使用 :interval 資料行時,移除棄用警告。

    現在,間隔資料行將返回 ActiveSupport::Duration 物件,而不是字串。

    要保留舊的行為,您可以將此行新增到您的模型中

    attribute :column, :string
    
  • 移除已棄用支援使用 "primary" 作為連線規格名稱來解析連線。

  • 移除已棄用支援引用 ActiveRecord::Base 物件。

  • 移除已棄用支援將 ActiveRecord::Base 物件的類型轉換為資料庫值。

  • 移除已棄用支援將資料行傳遞到 type_cast

  • 移除已棄用的 DatabaseConfig#config 方法。

  • 移除已棄用的 rake 任務

    • db:schema:load_if_ruby
    • db:structure:dump
    • db:structure:load
    • db:structure:load_if_sql
    • db:structure:dump:#{name}
    • db:structure:load:#{name}
    • db:test:load_structure
    • db:test:load_structure:#{name}
  • 移除已棄用支援使用 Model.reorder(nil).first 來搜尋非決定性排序。

  • 移除 Tasks::DatabaseTasks.schema_up_to_date? 中已棄用的 environmentname 引數。

  • 移除已棄用的 Tasks::DatabaseTasks.dump_filename

  • 移除已棄用的 Tasks::DatabaseTasks.schema_file

  • 移除已棄用的 Tasks::DatabaseTasks.spec

  • 移除已棄用的 Tasks::DatabaseTasks.current_config

  • 移除已棄用的 ActiveRecord::Connection#allowed_index_name_length

  • 移除已棄用的 ActiveRecord::Connection#in_clause_length

  • 移除已棄用的 ActiveRecord::DatabaseConfigurations::DatabaseConfig#spec_name

  • 移除已棄用的 ActiveRecord::Base.connection_config

  • 移除已棄用的 ActiveRecord::Base.arel_attribute

  • 移除已棄用的 ActiveRecord::Base.configurations.default_hash

  • 移除已棄用的 ActiveRecord::Base.configurations.to_h

  • 移除已棄用的 ActiveRecord::Result#map!ActiveRecord::Result#collect!

  • 移除已棄用的 ActiveRecord::Base#remove_connection

8.2 棄用

  • 已棄用 Tasks::DatabaseTasks.schema_file_type

8.3 重大變更

  • 當區塊比預期的更早返回時,回滾交易。

    在此變更之前,當交易區塊提早返回時,交易會被提交。

    問題在於,交易區塊內觸發的逾時也會使不完整的交易被提交,因此為了避免這個錯誤,交易區塊會被回滾。

  • 合併相同資料行的條件不再保留兩個條件,而是會一致地被後面的條件取代。

    # Rails 6.1 (IN clause is replaced by merger side equality condition)
    Author.where(id: [david.id, mary.id]).merge(Author.where(id: bob)) # => [bob]
    # Rails 6.1 (both conflict conditions exists, deprecated)
    Author.where(id: david.id..mary.id).merge(Author.where(id: bob)) # => []
    # Rails 6.1 with rewhere to migrate to Rails 7.0's behavior
    Author.where(id: david.id..mary.id).merge(Author.where(id: bob), rewhere: true) # => [bob]
    # Rails 7.0 (same behavior with IN clause, mergee side condition is consistently replaced)
    Author.where(id: [david.id, mary.id]).merge(Author.where(id: bob)) # => [bob]
    Author.where(id: david.id..mary.id).merge(Author.where(id: bob)) # => [bob]
    

9 Active Storage

詳細變更請參考變更日誌

9.1 移除

9.2 棄用

9.3 重大變更

10 Active Model

詳細變更請參考變更日誌

10.1 移除

  • 移除已棄用將 ActiveModel::Errors 實例列舉為雜湊。

  • 移除已棄用的 ActiveModel::Errors#to_h

  • 移除已棄用的 ActiveModel::Errors#slice!

  • 移除已棄用的 ActiveModel::Errors#values

  • 移除已棄用的 ActiveModel::Errors#keys

  • 移除已棄用的 ActiveModel::Errors#to_xml

  • 移除已棄用支援將錯誤串連到 ActiveModel::Errors#messages

  • 移除已棄用支援從 ActiveModel::Errors#messagesclear 錯誤。

  • 移除已棄用支援從 ActiveModel::Errors#messagesdelete 錯誤。

  • 移除已棄用支援在 ActiveModel::Errors#messages 中使用 []=

  • 移除支援 Marshal 和 YAML 載入 Rails 5.x 錯誤格式。

  • 移除支援 Marshal 載入 Rails 5.x ActiveModel::AttributeSet 格式。

10.2 棄用

10.3 重大變更

11 Active Support

詳細變更請參考變更日誌

11.1 移除

  • 移除已棄用的 config.active_support.use_sha1_digests

  • 移除已棄用的 URI.parser

  • 移除已棄用支援使用 Range#include? 來檢查日期時間範圍中是否包含某個值。

  • 移除已棄用的 ActiveSupport::Multibyte::Unicode.default_normalization_form

11.2 棄用

  • 棄用將格式傳遞給 #to_s,改用 ArrayRangeDateDateTimeTimeBigDecimalFloatInteger 中的 #to_fs

    此棄用是為了讓 Rails 應用程式能夠利用 Ruby 3.1 的最佳化,這使得某些類型的物件的插值速度更快。

    新的應用程式將不會在這些類別上覆寫 #to_s 方法,現有的應用程式可以使用 config.active_support.disable_to_s_conversion

11.3 重大變更

12 Active Job

詳細變更請參考變更日誌

12.1 移除

  • 移除當先前的回呼使用 throw :abort 停止時,不會停止 after_enqueue/after_perform 回呼的已棄用行為。

  • 移除已棄用的 :return_false_on_aborted_enqueue 選項。

12.2 已棄用的功能

  • 已棄用 Rails.config.active_job.skip_after_callbacks_if_terminated

12.3 重要變更

13 Action Text

詳細變更請參閱 變更日誌

13.1 移除

13.2 已棄用的功能

13.3 重要變更

14 Action Mailbox

詳細變更請參閱 變更日誌

14.1 移除

  • 已移除已棄用的 Rails.application.credentials.action_mailbox.mailgun_api_key

  • 已移除已棄用的環境變數 MAILGUN_INGRESS_API_KEY

14.2 已棄用的功能

14.3 重要變更

15 Ruby on Rails 指南

詳細變更請參閱 變更日誌

15.1 重要變更

16 貢獻者

請參閱 Rails 完整貢獻者列表,感謝許多人投入大量時間,讓 Rails 成為一個穩定且健全的框架。向他們所有人致敬。



回到頂端