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 現在是可選的依賴項
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::DeliveryJob
和ActionMailer::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
欄位時的過期警告。現在,區間欄位將傳回
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?
中已過期的environment
和name
參數。移除已過期的
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
實例作為 Hash 的列舉。移除已棄用的
ActiveModel::Errors#to_h
。移除已棄用的
ActiveModel::Errors#slice!
。移除已棄用的
ActiveModel::Errors#values
。移除已棄用的
ActiveModel::Errors#keys
。移除已棄用的
ActiveModel::Errors#to_xml
。移除已棄用的支援將錯誤串接至
ActiveModel::Errors#messages
。移除已棄用的支援從
ActiveModel::Errors#messages
中clear
錯誤。移除已棄用的支援從
ActiveModel::Errors#messages
中delete
錯誤。移除在
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 已棄用
棄用傳遞格式給
Array
、Range
、Date
、DateTime
、Time
、BigDecimal
、Float
和Integer
中的#to_s
,而改用#to_fs
。此棄用是為了讓 Rails 應用程式能利用 Ruby 3.1 最佳化,讓某些類型的物件插補更快。
新的應用程式不會在這些類別中覆寫
#to_s
方法,現有的應用程式可以使用config.active_support.disable_to_s_conversion
。
11.3 顯著變更
12 Active Job
請參閱 變更日誌 以取得詳細變更。
12.1 移除
移除已棄用的行為,當前一個 callback 使用
throw :abort
停止時,不會停止after_enqueue
/after_perform
callback。移除已棄用的
: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 成為穩定且強大的框架。向他們所有人致敬。
意見回饋
我們鼓勵您協助提升本指南的品質。
如果您發現任何錯字或事實錯誤,請貢獻您的力量。首先,您可以閱讀我們的 文件貢獻 部分。
您也可能會發現不完整或過時的內容。請務必新增任何缺少的 main 文件。請務必先查看 Edge 指南,以驗證問題是否已在主分支中修復。查看 Ruby on Rails 指南準則 以了解風格和慣例。
如果您發現需要修復但無法自行修補的任何問題,請 開啟問題。
最後但並非最不重要的一點,我們非常歡迎在 官方 Ruby on Rails 論壇 上針對 Ruby on Rails 文件進行任何類型的討論。