edge
更多資訊請參考 rubyonrails.org: 更多 Ruby on Rails

Ruby on Rails 7.0 發行說明

Rails 7.0 的亮點:

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_file_upload 的路徑相對於 fixture_path 傳遞的已棄用支援。

5.2 廢棄

5.3 重要變更

6 Action View

詳細變更請參閱變更日誌

6.1 刪除

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

6.2 廢棄

6.3 重要變更

  • button_to 從 Active Record 物件中推斷 HTTP 動詞 [method],如果使用物件建立 URL

    button_to("執行 POST", [:do_post_action, Workshop.find(1)])
    # 之前
    #=>   <input type="hidden" name="_method" value="post" autocomplete="off" />
    # 之後
    #=>   <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 參數。

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

  • 刪除 configs_for 方法中 :spec_name 選項的已棄用支援。

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

  • 刪除在 PostgreSQL 資料庫中使用 :interval 欄位時的廢棄警告。

    現在,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子句被合併方的相等條件替換)
    Author.where(id: [david.id, mary.id]).merge(Author.where(id: bob)) # => [bob]
    # Rails 6.1(兩個衝突條件都存在,不推薦)
    Author.where(id: david.id..mary.id).merge(Author.where(id: bob)) # => []
    # Rails 6.1使用rewhere遷移到Rails 7.0的行為
    Author.where(id: david.id..mary.id).merge(Author.where(id: bob), rewhere: true) # => [bob]
    # Rails 7.0(與IN子句相同的行為,合併方的條件被一致替換)
    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

詳細更改請參閱Changelog

9.1 移除

9.2 不推薦

9.3 重要更改

10 Active Model

詳細更改請參閱Changelog

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#messages中清除錯誤的不推薦支持。

  • 移除從ActiveModel::Errors#messages中刪除錯誤的不推薦支持。

  • 移除在ActiveModel::Errors#messages中使用[]=的支持。

  • 移除對Rails 5.x錯誤格式的Marshal和YAML加載支持。

  • 移除對於Rails 5.x ActiveModel::AttributeSet 格式的 Marshal 加載支援。

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 廢棄功能

  • 廢棄在 ArrayRangeDateDateTimeTimeBigDecimalFloatInteger 中將格式傳遞給 #to_s,改用 #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 Guides

詳細變更請參考變更日誌

15.1 重要變更

16 貢獻者

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

回饋

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

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

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

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

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