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],如果使用物件建立 URLbutton_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::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
欄位時的廢棄警告。現在,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子句被合併方的相等條件替換) 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 廢棄功能
廢棄在
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 移除功能
移除在前一個回呼使用
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 論壇 上進行。