Rails 7.0の注目ポイント:
既存のアプリケーションをアップグレードするのであれば、その前に質のよいテストカバレッジを用意するのはよい考えです。アプリケーションがRails 6.1までアップグレードされていない場合は先にそれを完了し、アプリケーションが正常に動作することを十分確認してからRails 7.0にアップデートしてください。アップグレードの注意点などについてはRailsアップグレードガイドを参照してください。
変更点について詳しくはChangelogを参照してください。
dbconsole
で非推奨化されていたconfig
を削除。特になし。
Sprocketsへの依存がオプショナルになった
rails
gemがsprockets-rails
に依存しなくなりました。自分のアプリケーションでSprocketsを使う必要がある場合は、以下のようにGemfileに追加してください。
gem "sprockets-rails"
変更点について詳しくはChangelogを参照してください。
特になし。
特になし。
特になし。
変更点について詳しくはChangelogを参照してください。
非推奨化されていたActionDispatch::Response.return_only_media_type_on_content_type
を削除。
非推奨化されていたRails.config.action_dispatch.hosts_response_app
を削除。
非推奨化されていたActionDispatch::SystemTestCase#host!
を削除。
fixture_path
への相対パスをfixture_file_upload
に渡すサポート(非推奨化済み)を削除。
特になし。
特になし。
変更点について詳しくはChangelogを参照してください。
Rails.config.action_view.raise_on_missing_translations
を削除特になし。
button_to
メソッドでオブジェクトがURLのビルドに使われている場合に、Active RecordオブジェクトからHTTP verb [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" />
変更点について詳しくはChangelogを参照してください。
ActionMailer::DeliveryJob
およびActionMailer::Parameterized::DeliveryJob
が削除された(今後はActionMailer::MailDeliveryJob
を使う)。特になし。
特になし。
変更点について詳しくはChangelogを参照してください。
非推奨化されていたdatabase
キーワード引数をconnected_to
から削除。
非推奨化されていたActiveRecord::Base.allow_unsafe_raw_sql
を削除。
configs_for
メソッドで非推奨化されていた:spec_name
オプションを削除。
Rails 4.2および4.1フォーマットで非推奨化されていたActiveRecord::Base
インスタンスのYAML読み込みサポートを削除。
PostgreSQLで:interval
カラムが使われている場合の非推奨化警告メッセージを削除。
今後:interval
カラムは文字列ではなくActiveSupport::Duration
オブジェクトを返します。
従来の振る舞いを維持する場合は、以下の行を自分のモデルに追加できます。
attribute :column, :string
コネクションのspecification名として"primary"
を用いてコネクションを解決するサポート(非推奨化済み)を削除。
ActiveRecord::Base
オブジェクトを引用符で直接囲めるようにするサポート(非推奨化済み)を削除。
ActiveRecord::Base
オブジェクトをtype_cast
で直接データベース値へ型キャストできるようにするサポート(非推奨化済み)を削除。
カラムを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
を削除。
Tasks::DatabaseTasks.schema_file_type
を非推奨化。トランザクションブロックが期待より早期に返された場合にトランザクションをロールバックするようになった。
変更前は、ブロックが期待より早期に返されるとトランザクションがコミットされる可能性がありました。
この問題は、トランザクションブロック内部でトリガーされるタイムアウトによって不完全なトランザクションがコミットされるというものです。この問題を回避するため、トランザクションブロックはロールバックされます。
同じカラム上で条件をマージした場合に両方の条件が維持されなくなり、常に後者の条件によって置き換わるようになった。
# 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]
変更点について詳しくはChangelogを参照してください。
特になし。
特になし。
特になし。
変更点について詳しくはChangelogを参照してください。
ActiveModel::Errors
をハッシュとして列挙できるようにするサポート(非推奨化済み)を削除。
非推奨化されたActiveModel::Errors#to_h
を削除。
非推奨化されたActiveModel::Errors#slice!
を削除。
非推奨化されたActiveModel::Errors#values
を削除。
非推奨化されたActiveModel::Errors#keys
を削除。
非推奨化されたActiveModel::Errors#to_xml
を削除。
ActiveModel::Errors#messages
で非推奨化されていたconcatエラーのサポートを削除。
ActiveModel::Errors#messages
のエラーをclear
するサポート(非推奨化済み)を削除。
ActiveModel::Errors#messages
のエラーをdelete
するサポート(非推奨化済み)を削除。
ActiveModel::Errors#messages
で[]=
を利用できるようにするサポート(非推奨化済み)を削除。
MarshalとYAMLのloadからRails 5.xのエラーフォーマットのサポートを削除
MarshalのloadからRails 5.xのActiveModel::AttributeSet
フォーマットのサポートを削除。
特になし。
特になし。
変更点について詳しくはChangelogを参照してください。
非推奨化されていたconfig.active_support.use_sha1_digests
を削除。
非推奨化されていたURI.parser
を削除。
日時のrange内に値が含まれているかどうかのチェックにRange#include?
を利用できるようにするサポート(非推奨化済み)を削除。
非推奨化されていたActiveSupport::Multibyte::Unicode.default_normalization_form
を削除。
フォーマットを#to_s
に渡すことが非推奨化された。今後Array
、Range
、Date
、DateTime
、Time
、BigDecimal
、Float
、Integer
では#to_fs
を使うこと。
この非推奨化は、Ruby 3.1である種のオブジェクトの式展開を高速化する最適化を利用できるようにするためのものです。
新しいアプリケーションではそれらのクラスの#to_s
メソッドがオーバーライドされません。既存のアプリケーションではconfig.active_support.disable_to_s_conversion
でオーバーライドされないようにできます。
特になし。
変更点について詳しくはChangelogを参照してください。
Removed deprecated behavior that was not halting after_enqueue
/after_perform
callbacks when a
previous callback was halted with throw :abort
.
非推奨化されていた:return_false_on_aborted_enqueue
オプションを削除。
Rails.config.active_job.skip_after_callbacks_if_terminated
を非推奨化。
特になし。
変更点について詳しくはChangelogを参照してください。
特になし。
特になし。
特になし。
変更点について詳しくはChangelogを参照してください。
非推奨化されていたRails.application.credentials.action_mailbox.mailgun_api_key
を削除。
非推奨化されていた環境変数MAILGUN_INGRESS_API_KEY
を削除。
特になし。
特になし。
変更点について詳しくはChangelogを参照してください。
特になし。
Railsを頑丈かつ安定したフレームワークにするために多大な時間を費やしてくださった多くの開発者については、Railsコントリビューターの完全なリストを参照してください。これらの方々全員に深く敬意を表明いたします。
Railsガイドは GitHub の yasslab/railsguides.jp で管理・公開されております。本ガイドを読んで気になる文章や間違ったコードを見かけたら、気軽に Pull Request を出して頂けると嬉しいです。Pull Request の送り方については GitHub の README をご参照ください。
原著における間違いを見つけたら『Rails のドキュメントに貢献する』を参考にしながらぜひ Rails コミュニティに貢献してみてください 🛠💨✨
本ガイドの品質向上に向けて、皆さまのご協力が得られれば嬉しいです。
Railsガイド運営チーム (@RailsGuidesJP)
Railsガイドは下記の協賛企業から継続的な支援を受けています。支援・協賛にご興味あれば協賛プランからお問い合わせいただけると嬉しいです。