Rails 7.1 の注目ポイント:
ActiveRecord::Base.normalizes
を追加ActiveRecord::Base.generates_token_for
を追加perform_all_later
Trilogy
用アダプタの導入ActiveSupport::MessagePack
を追加config.autoload_lib
とconfig.autoload_lib_once
を追加(拡張オートローディング用)locals
を設定可能になったRails.application.deprecators
を追加response.parsed_body
のパターンマッチングをサポートresponse.parsed_body
を拡張してHTMLをNokogiriでパース可能になったActionView::TestCase.register_parser
を導入本リリースノートでは、主要な変更についてのみ説明します。多数のバグ修正および変更点については、GitHubのRailsリポジトリにあるコミットリストを参照してください。
ActiveRecord::Base.normalizes
が追加ActiveRecord::Base.generates_token_for
が追加perform_all_later
が追加ActiveSupport::MessagePack
が追加config.autoload_lib
とconfig.autoload_lib_once
設定が導入locals
を設定可能になったRails.application.deprecators
が追加response.parsed_body
でパターンマッチングをサポートresponse.parsed_body
が拡張されてHTMLをNokogiriで解析可能になったActionView::TestCase.register_parser
の導入既存のアプリケーションをアップグレードするのであれば、その前に質のよいテストカバレッジを用意するのはよい考えです。アプリケーションがRails 7.0までアップグレードされていない場合は先にそれを完了し、アプリケーションが正常に動作することを十分確認してからRails 7.1にアップデートしてください。アップグレードの注意点などについてはRailsアップグレードガイドを参照してください。
新規Railsアプリケーションでは、デフォルトでDockerがサポートされるようになりました(#46762)。 新しいアプリケーションを生成すると、そのアプリケーションにDocker関連ファイルも含まれます。
これらのファイルは、RailsアプリケーションをDockerでproduction環境にデプロイするための基本的なセットアップとして提供されます。重要なのは、これらのファイルは開発用ではないことです。
以下は、これらのDockerファイルでRailsアプリをビルドして実行する簡単な例です。
$ docker build -t app . $ docker volume create app-storage $ docker run --rm -it -v app-storage:/rails/storage -p 3000:3000 --env RAILS_MASTER_KEY=<your-config-master-key> app
Railsコンソールやランナーも、このDockerイメージから起動できます。
$ docker run --rm -it -v app-storage:/rails/storage --env RAILS_MASTER_KEY=<your-config-master-key> app console
マルチプラットフォーム向けイメージ(Apple SiliconをAMDやIntelデプロイするなど)を作成してDocker Hubにプッシュする方法を知りたい方は、以下の手順に沿ってください。
$ docker login -u <your-user> $ docker buildx create --use $ docker buildx build --push --platform=linux/amd64,linux/arm64 -t <your-user/image-name> .
この拡張によってデプロイプロセスがシンプルになるので、これを出発点としてRailsアプリケーションをproduction環境ですばやく立ち上げられるようにできます。
ActiveRecord::Base.normalizes
が追加ActiveRecord::Base.normalizes
は属性値に対して正規化を宣言します(#43945)。正規化は、属性の代入や更新のタイミングで行われ、データベースで永続化されます。正規化はfinder系メソッドの対応するキーワード引数にも適用されるので、正規化されていない値でレコードをクエリできるようになります。
例:
class User < ActiveRecord::Base normalizes :email, with: -> email { email.strip.downcase } normalizes :phone, with: -> phone { phone.delete("^0-9").delete_prefix("1") } end user = User.create(email: " CRUISE-CONTROL@EXAMPLE.COM\n") user.email # => "cruise-control@example.com" user = User.find_by(email: "\tCRUISE-CONTROL@EXAMPLE.COM ") user.email # => "cruise-control@example.com" user.email_before_type_cast # => "cruise-control@example.com" User.where(email: "\tCRUISE-CONTROL@EXAMPLE.COM ").count # => 1 User.where(["email = ?", "\tCRUISE-CONTROL@EXAMPLE.COM "]).count # => 0 User.exists?(email: "\tCRUISE-CONTROL@EXAMPLE.COM ") # => true User.exists?(["email = ?", "\tCRUISE-CONTROL@EXAMPLE.COM "]) # => false User.normalize_value_for(:phone, "+1 (555) 867-5309") # => "5558675309"
ActiveRecord::Base.generates_token_for
が追加ActiveRecord::Base.generates_token_for
は特定の目的で利用するトークンの生成を定義します(#44189)。生成されたトークンは失効させることも、レコードデータを埋め込むこともできます。トークンを用いてレコードを取得すると、トークンのデータと現在のレコードのデータが比較されます。両者が一致しない場合、トークンは無効とみなされ、期限切れとして扱われます。
単一利用の例として、パスワードリセットのトークンの実装を以下に示します。
class User < ActiveRecord::Base has_secure_password generates_token_for :password_reset, expires_in: 15.minutes do # `password_salt`(`has_secure_password`で定義される)は、 # そのパスワードのsaltを返す。パスワードが変更されるとsaltも変更されるので、 # パスワードが変更されるとこのトークンは無効になる。 password_salt&.last(10) end end user = User.first token = user.generate_token_for(:password_reset) User.find_by_token_for(:password_reset, token) # => user user.update!(password: "new password") User.find_by_token_for(:password_reset, token) # => nil
perform_all_later
が追加Active Jobのperform_all_later
メソッドは、複数のジョブを同時にエンキューするプロセスを効率化するために設計されています(#46603)。この強力な追加機能により、コールバックをトリガーせずに効率的にジョブをエンキューできるようになります。これは特に複数ジョブを一括でエンキューする必要がある場合や、データがキューデータストアと何度も往復することによるオーバーヘッドを削減したい場合に便利です。
perform_all_later
の利用方法を以下に示します。
# 個別のジョブをエンキューする ActiveJob.perform_all_later(MyJob.new("hello", 42), MyJob.new("world", 0)) # ジョブの配列をエンキューする user_jobs = User.pluck(:id).map { |id| UserJob.new(user_id: id) } ActiveJob.perform_all_later(user_jobs)
perform_all_later
を利用することで、ジョブのエンキュー処理を最適化し、特に大量のジョブを扱うときの効率が向上します。Sidekiqアダプタなど、新しいenqueue_all
メソッドをサポートするキューアダプタでは、push_bulk
を使うことでさらにエンキュー処理が最適化されます。
この新しいメソッドでは、既存のenqueue.active_job
イベントを使わず、別のenqueue_all.active_job
イベントが導入されます。これにより、一括エンキュー処理のトラッキングとレポートが精密に行われるようになります。
データベースとアプリケーションの両方で複合主キー(composite primary key)がサポートされるようになりました。Railsはスキーマからこれらのキーを直接導出できるようになります。この機能は、「多対多」リレーションシップや、その他の複雑なデータモデルで、単一カラムだけではレコードをうまく一意に識別できない場合に特に有用です。
Active Recordのクエリメソッドで生成されるSQL(#reload
、#update
、#delete
など)には、複合主キーのすべての部分が含まれます。 #first
や #last
などのメソッドでは、ORDER BY
ステートメントで複合主キー全体が使われます。
query_constraints
マクロは、データベーススキーマを変更せずに同じ振る舞いを実現するための「仮想主キー」として利用できます。
例:
class TravelRoute < ActiveRecord::Base query_constraints :origin, :destination end
同様に、関連付けにもquery_constraints:
オプションを渡せます。このオプションは、関連付けられるレコードにアクセスするのに使うカラムのリストを設定する「複合外部キー(composite foreign key)」として機能します。
例:
class TravelRouteReview < ActiveRecord::Base belongs_to :travel_route, query_constraints: [:travel_route_origin, :travel_route_destination] end
MySQL互換のデータベースクライアントであるTrilogy
とRailsアプリケーションをシームレスに統合する新しいアダプターが導入されました(#47880)。これにより、Railsアプリケーションで以下のようにconfig/database.yml
ファイルを設定することで、Trilogy
の機能を取り込むオプションが提供されます。
development: adapter: trilogy database: blog_development pool: 5
または、以下のようにDATABASE_URL
環境変数で統合することも可能です。
ENV["DATABASE_URL"] # => "trilogy://localhost/blog_development?pool=5"
ActiveSupport::MessagePack
が追加ActiveSupport::MessagePack
は、msgpack
gemと統合されたシリアライザです(#47770)。ActiveSupport::MessagePack
は、msgpack
でサポートされている基本的なRubyの型に加えて、Time
、 ActiveSupport::TimeWithZone
、ActiveSupport::HashWithIndifferentAccess
などの追加の型もシリアライズできます。ActiveSupport::MessagePack
は、JSON
やMarshal
に比べてペイロードサイズを削減しパフォーマンスを向上させることが可能です。
ActiveSupport::MessagePack
は、以下のようにメッセージシリアライザとして利用できます。
config.active_support.message_serializer = :message_pack # または個別に指定する ActiveSupport::MessageEncryptor.new(secret, serializer: :message_pack) ActiveSupport::MessageVerifier.new(secret, serializer: :message_pack)
以下のようにcookieシリアライザとしても利用できます(#48103)。
config.action_dispatch.cookies_serializer = :message_pack
以下のようにキャッシュシリアライザとしても利用できます(#48104)。
config.cache_store = :file_store, "tmp/cache", { serializer: :message_pack } # または個別に指定する ActiveSupport::Cache.lookup_store(:file_store, "tmp/cache", serializer: :message_pack)
config.autoload_lib
とconfig.autoload_lib_once
設定が導入config.autoload_lib(ignore:)
という新しい設定メソッドが導入されました(#48572)。このメソッドは、デフォルトでは自動読み込みパスに含まれていないlib
ディレクトリをアプリケーションの自動読み込みパスに追加するために利用されます。また、新しいアプリケーションではconfig.autoload_lib(ignore: %w(assets tasks))
が生成されます。
このメソッドがconfig/application.rb
またはconfig/environments/*.rb
から呼び出されると、lib
ディレクトリをconfig.autoload_paths
およびconfig.eager_load_paths
の両方に追加します。ただし、この機能はエンジンでは利用できません。
オートローダーによって管理されるべきではないlib
ディレクトリ内のサブディレクトリをignore
キーワード引数で指定することで、柔軟性を確保できます。たとえば、assets
、tasks
、およびgenerators
などのディレクトリをignore
引数に渡すことで除外できるようになります。
config.autoload_lib(ignore: %w(assets tasks generators))
config.autoload_lib_once
メソッド(#48610)は、config.autoload_lib
と似ていますが、lib
をconfig.autoload_once_paths
に追加する点が異なります。
詳しくはZeitwerkの自動読み込みガイドを参照してください。
Active Record APIに重要な改善が導入され、非同期クエリのサポートが拡張されました(#44446)。この拡張により、特に集計メソッド(count
、sum
など)や、(Relation
でない)単一レコードを返すメソッドなど、あまり速くないクエリをより効率的に処理するニーズに応えます。
新しいAPIには、以下の非同期メソッドが含まれます。
async_count
async_sum
async_minimum
async_maximum
async_average
async_pluck
async_pick
async_ids
async_find_by_sql
async_count_by_sql
これらの中からasync_count
メソッドを用いて、公開済み投稿の数を非同期的にカウントする方法の簡単な例を以下に示します。
# 同期的なカウント published_count = Post.where(published: true).count # => 10 # 非同期なカウント promise = Post.where(published: true).async_count # => #<ActiveRecord::Promise status=pending> promise.value # => 10
これらの非同期メソッドは、特定のデータベースクエリにおいてパフォーマンスを大幅に向上可能な非同期な方法でこれらの操作を実行できます。
locals
を設定可能になったテンプレートでlocals
を明示的に設定できる新機能が導入されました(#45602)。
この拡張により、テンプレートに渡される変数を明確に制御できるようになります。
デフォルトのテンプレートは、任意のlocals
をキーワード引数として受け入れます。ただし、テンプレートファイルの先頭にlocals
をERBマジックコメントの形で追加することで、テンプレートが受け取るべきlocals
を定義できます。
locals
は以下のように指定します。
<%# locals: (message:) -%> <%= message %>
このlocals
には以下のようにデフォルト値も設定できます。
<%# locals: (message: "Hello, world!") -%> <%= message %>
オプショナルのキーワード引数で以下のようにsplat **
を使うことも可能です。
<%# locals: (message: "Hello, world!", **attributes) -%> <%= tag.p(message, **attributes) %>
locals
を完全に無効にしたい場合は、以下のように設定できます。
<%# locals: () %>
Action Viewは、#
で始まるコメントをサポートするテンプレートエンジンであれば、ビューの任意の行にあるlocals:
マジックコメントを処理し、パーシャルの任意の行にあるマジックコメントを読み取ります。
サポートされるのはキーワード引数だけです。位置引数やブロック引数を定義すると、レンダリング時にAction Viewエラーが発生します。
Rails.application.deprecators
が追加新しいRails.application.deprecators
メソッド(#46049)は、アプリケーション内の管理された非推奨要素のコレクションを返し、個別の非推奨要素を手軽に追加および取得できます。
Rails.application.deprecators[:my_gem] = ActiveSupport::Deprecation.new("2.0", "MyGem") Rails.application.deprecators[:other_gem] = ActiveSupport::Deprecation.new("3.0", "OtherGem")
このコレクションの設定は、コレクション内のすべての非推奨機能に影響を与えます。
Rails.application.deprecators.debug = true Rails.application.deprecators[:my_gem].debug # => true Rails.application.deprecators[:other_gem].debug # => true
場合によっては、特定のコードブロックですべての非推奨警告をミュートしたいことがあります。
deprecators
コレクションを使うことで、ブロック内のすべてのdeprecator警告を手軽に無効化できます。
Rails.application.deprecators.silence do Rails.application.deprecators[:my_gem].warn # 警告を表示しなくなる Rails.application.deprecators[:other_gem].warn # 警告を表示しなくなる end
response.parsed_body
でパターンマッチングをサポートActionDispatch::IntegrationTest
のテストブロックがJSONレスポンスに対してresponse.parsed_body
を呼び出すと、そのペイロードはHashWithIndifferentAccess
で利用可能になります。これにより、Rubyのパターンマッチングと組み合わせられるようになり、Minitest組み込みのパターンマッチングサポートとも連携可能になります。
get "/posts.json" response.content_type # => "application/json; charset=utf-8" response.parsed_body.class # => Array response.parsed_body # => [{},... assert_pattern { response.parsed_body => [{ id: 42 }] } get "/posts/42.json" response.content_type # => "application/json; charset=utf-8" response.parsed_body.class # => ActiveSupport::HashWithIndifferentAccess response.parsed_body # => {"id"=>42, "title"=>"Title"} assert_pattern { response.parsed_body => [{ title: /title/i }] }
response.parsed_body
が拡張されてHTMLをNokogiriで解析可能になったActionDispatch::Testing
モジュールが拡張され(#47144)、HTMLのresponse.body
の値を解析してNokogiri::HTML5::Document
インスタンスにするサポートを追加します。
get "/posts" response.content_type # => "text/html; charset=utf-8" response.parsed_body.class # => Nokogiri::HTML5::Document response.parsed_body.to_html # => "<!DOCTYPE html>\n<html>\n..."
新たに追加されたNokogiriパターンマッチングのサポートと、Minitest組み込みのパターンマッチングのサポートを利用して、HTMLレスポンスの構造や内容に関するテストアサーションを行えるようになります。
get "/posts" html = response.parsed_body # => <html> # <head></head> # <body> # <main><h1>何らかのメインコンテンツ</h1></main> # </body> # </html> assert_pattern { html.at("main") => { content: "何らかのメインコンテンツ" } } assert_pattern { html.at("main") => { content: /content/ } } assert_pattern { html.at("main") => { children: [{ name: "h1", content: /content/ }] } }
ActionView::TestCase.register_parser
の導入ActionView::TestCase
を拡張して、ビューパーシャルでレンダリングするコンテンツを解析して既知の構造に変換する機能をサポートしました(#49194)。
デフォルトでは、以下が定義されています。
rendered_html
: HTMLをNokogiri::XML::Node
に変換rendered_json
: JSONをActiveSupport::HashWithIndifferentAccess
に変換test "renders HTML" do article = Article.create!(title: "Hello, world") render partial: "articles/article", locals: { article: article } assert_pattern { rendered_html.at("main h1") => { content: "Hello, world" } } end
test "renders JSON" do article = Article.create!(title: "Hello, world") render formats: :json, partial: "articles/article", locals: { article: article } assert_pattern { rendered_json => { title: "Hello, world" } } end
レンダリングしたコンテンツをRSSに変換するには、RSS::Parser.parse
呼び出しを登録します。
register_parser :rss, -> rendered { RSS::Parser.parse(rendered) } test "renders RSS" do article = Article.create!(title: "Hello, world") render formats: :rss, partial: article, locals: { article: article } assert_equal "Hello, world", rendered_rss.items.last.title end
レンダリングしたコンテンツをCapybara::Simple::Node
に変換するには、:html
パーサーにCapybara.string
呼び出しを再登録します。
register_parser :html, -> rendered { Capybara.string(rendered) } test "renders HTML" do article = Article.create!(title: "Hello, world") render partial: article rendered_html.assert_css "main h1", text: "Hello, world" end
変更点について詳しくはChangelogを参照してください。
非推奨化されたbin/rails secrets:setup
コマンドを削除(#47801)。
デフォルトのX-Download-Options
ヘッダー(Internet Explorerでしか使われていない)を削除(#43968)。
Rails.application.secrets
の利用を非推奨化(#48472)。
secrets:show
コマンドとsecrets:edit
コマンドが非推奨化、今後はcredentials
を利用する(#47801)。
Rails::Generators::Testing::Behaviour
(英国スペル)を非推奨化、今後は米国スペルのRails::Generators::Testing::Behavior
を使う(#45180)。
production環境でのRailsコンソールをデフォルトでsandboxモードで起動できるようにするsandbox_by_default
オプションが追加(#48984)。
実行するテストを行範囲で指定できる新しい構文を追加(#48807)。
マイグレーションをコピーするためにrails railties:install:migrations
コマンドを実行したときに対象データベースの仕様を有効にするDATABASE
オプションを追加(#48579)。
rails new --javascript
ジェネレータでBunをサポート(#49241)。
$ rails new my_new_app --javascript=bun
遅いテストをテストランナーで表示する機能を追加(#49257)。
変更点について詳しくはChangelogを参照してください。
特になし。
特になし。
capture_broadcasts
テストヘルパーを追加(#48798)。ブロードキャストされたすべてのメッセージをブロック内でキャプチャする。
Redisのコネクションが失われたときにRedisのpub/subアダプタを自動再接続する機能を追加(#46562)。
ActionCable::Connection::Base
にbefore_command
、after_command
、around_command
コールバックを追加(#44696)。
変更点について詳しくはChangelogを参照してください。
Request#content_type
の非推奨化された振る舞いを削除(689b277)。
config.action_dispatch.trusted_proxies
に単一の値を代入可能だった非推奨の機能を削除(1e70d0f)。
非推奨化されていたpoltergeist
とwebkit
(capybara-webkit)ドライバのシステムテストへの登録を削除(696ccbc)。
config.action_dispatch.return_only_request_media_type_on_content_type
を非推奨化(689b277)。
AbstractController::Helpers::MissingHelperError
を非推奨化(#47199)。
ActionDispatch::IllegalStateError
を非推奨化(#47200)。
パーミッションポリシーの古くなったディレクティブspeaker
、vibrate
、vr
を非推奨化(#46199)。
config.action_dispatch.show_exceptions
にtrue
やfalse
を設定することを非推奨化(#45867)。今後は:all
、:rescuable
、:none
を使うこと。
ActionController::Parameters
にexclude?
メソッドを追加。これはinclude?
と逆の動作(#45887)。
ActionController::Parameters#extract_value
メソッドを追加。これはparamsからシリアライズ済みの値を抽出できる(#49042)。
カスタムロジックでCSRFトークンの保存と取り出しを行えるようになった(#44283)。
システムテストのスクリーンショットヘルパーにhtml
とscreenshot
キーワード引数を追加(#44720)。
変更点について詳しくはChangelogを参照してください。
特になし。
checkbox_tag
とradio_button_tag
にchecked:
をキーワード引数として渡せるようになった(#45527)。
HTML <picture>
タグを生成するpicture_tag
を追加(#48100)。
simple_format
ヘルパーで:sanitize_options
機能が使えるようになった(#48355)。これを用いてサニタイズ処理に追加オプションを指定できる。
simple_format("<a target=\"_blank\" href=\"http://example.com\">Continue</a>", {}, { sanitize_options: { attributes: %w[target href] } }) # => "<p><a target=\"_blank\" href=\"http://example.com\">Continue</a></p>"
変更点について詳しくはChangelogを参照してください。
特になし。
config.action_mailer.preview_path
(単数形)が非推奨化(#31595)。
パラメータを:args
キーワード引数経由でassert_enqueued_email_with
に渡すことが非推奨化(#48194)。:params
キーワード引数がサポートされたので、今後はこれを用いてparamsを渡すこと。
複数のプレビューパスをサポートするconfig.action_mailer.preview_paths
(複数形)を追加(#31595)。
ブロック内で送信された全メールをキャプチャするcapture_emails
テストヘルパーを追加(#48798)。
エンキューされた全メールジョブを配信するdeliver_enqueued_emails
をActionMailer::TestHelper
に追加(#47520)。
変更点について詳しくはChangelogを参照してください。
非推奨化されていたActiveRecord.legacy_connection_handling
のサポートを削除(#44827)。
非推奨化されていたActiveRecord::Base
の設定アクセサを削除(96c9db1)。
configs_for
での:include_replicas
のサポートを削除。今後は:include_hidden
を使うこと(#47536)。
非推奨化されていたconfig.active_record.partial_writes
を削除(96b9fd6)。
非推奨化されていたTasks::DatabaseTasks.schema_file_type
を削除(049dfd4)。
PostgreSQL向けのstructure dumpでの--no-comments
フラグを削除(#44633)。
#remove_connection
のname
引数を非推奨化(#48681)。
check_pending!
を非推奨化(#48964)。今後はcheck_all_pending!
を使うこと。
add_foreign_key
のdeferrable: true
オプションを非推奨化(#47659)。今後はdeferrable: :immediate
を使うこと。
単数形のTestFixtures#fixture_path
を非推奨化(#47675)。今後は複数形のTestFixtures#fixture_paths
を使うこと。
Base
からconnection_handler
への委譲を非推奨化(#46274)。
config.active_record.suppress_multiple_database_warning
を非推奨化(#46134)。
ActiveSupport::Duration
をSQL文字列テンプレート内でバインドパラメータとして式展開することを非推奨化(#44438)。
all_connection_pools
を非推奨化し、connection_pool_list
でオプションを明示的に指定する形に変わった(#45961)。
主キーが:id
でない場合にread_attribute(:id)
が主キーを返す振る舞いを非推奨化(#49019)。
#merge
のrewhere
オプションを非推奨化(#45498)。
属性でないものをalias_attribute
でエイリアスにすることを非推奨化(#48972)。
複数のフィクスチャパスをサポートするTestFixtures#fixture_paths
を追加(#47675)。
has_secure_password
にauthenticate_by
メソッドを追加(#43765)。
ActiveRecord::Persistence
にupdate_attribute!
を追加。 update_attribute
と同様だが、before_*
コールバックで:abort
がスローされた場合はActiveRecord::RecordNotSaved
をraiseする点が異なる(#44141)。
insert_all
とupsert_all
でエイリアス属性も指定できるようになった(#45036)。
マイグレーションのadd_index
に:include
オプションを追加(PostgreSQLのみ)(#44803)。
#regroup
クエリメソッドを追加(#47010)。これは.unscope(:group).group(fields)
のショートハンド。
SQLite3
アダプタに自動生成カラム、カスタム主キーのサポートを追加(#49290)。
SQLite3
データベースコネクション用の設定に高パフォーマンスの新しいデフォルトを追加(#49349)。
where
にカラムの"タプル"構文を導入(#47729)。
Topic.where([:title, :author_name] => [["The Alchemist", "Paulo Coelho"], ["Harry Potter", "J.K Rowling"]])
自動生成されるインデックス名が最大62バイトになった(#47753)。この長さは、MySQL、PostgreSQL、SQLite3のインデックス名のデフォルトの最大長さに収まる
Trilogyデータベースクライアント用のアダプタを導入(#47880)。
全コネクションプールにある全コネクションを即座にクローズするActiveRecord.disconnect_all!
を追加(#47856)。
PostgreSQLのマイグレーションでenumのリネーム、値の追加、値のリネームが可能になった (#44898)。
レコードのid
カラムの生の値にアクセスするActiveRecord::Base#id_value
を追加(#48930)。
enum
にvalidate
オプションを追加(#49100)。
変更点について詳しくはChangelogを参照してください。
Active Storageの設定で非推奨化されていた無効なデフォルトContent-Typeを削除(4edaa41)。
非推奨化されていたActiveStorage::Current#host
メソッドとActiveStorage::Current#host=
メソッドを削除(0591de5)。
添付ファイルのコレクションへの代入時の非推奨化されていた振る舞いを削除(c720b7e)。コレクションへの追加ではなく、コレクションが置き換えられるようになった。
非推奨化されていた、添付ファイルの関連付けからのpurge
メソッドとpurge_later
メソッドを削除(18e53fb)。
特になし。
ActiveStorage::Analyzer::AudioAnalyzer
が、出力のmetadata
ハッシュでsample_rate
とtags
を出力するようになった(#48823、#47749)。
添付ファイルでpreview
メソッドやrepresentation
メソッドを呼び出したときに定義済みのvariantを利用可能にするオプションを追加(#45098)。
variantをプリプロセス用に宣言できるpreprocessed
オプションを追加(#47473)。
Active Storageのvariantを削除する機能を追加(#47150)。
User.first.avatar.variant(resize_to_limit: [100, 100]).destroy
変更点について詳しくはChangelogを参照してください。
特になし。
特になし。
LengthValidator
の:in
オプションや:within
オプションでbeginless/endless rangeをサポート(#45138)。
validates_length_of :first_name, in: ..30
validates_inclusion_of
やvalidates_exclusion_of
でbeginless rangeをサポート(#45123)。
validates_inclusion_of :birth_date, in: -> { (..Date.today) }
validates_exclusion_of :birth_date, in: -> { (..Date.today) }
has_secure_password
にpassword_challenge
アクセサを追加。password_challenge
が設定されている場合、現在永続化済みのpassword_digest
とマッチするかどうかをバリデーションする(#43688)。
バリデータにrecord
引数なしのlambdaを渡せるようになった(#45118)。
# 更新前 validates_comparison_of :birth_date, less_than_or_equal_to: ->(_record) { Date.today } # 更新後 validates_comparison_of :birth_date, less_than_or_equal_to: -> { Date.today }
変更点について詳しくはChangelogを参照してください。
Enumerable#sum
の非推奨化されたオーバーライドを削除(3ec6297)。
非推奨化されていたActiveSupport::PerThreadRegistry
を削除(4eb6441)。
Array
、Range
、Date
、DateTime
、Time
、BigDecimal
、Float
、Integer
でフォーマットが#to_s
に渡される非推奨のオプションを削除(e420c33)。
非推奨化されていたActiveSupport::TimeWithZone.name
のオーバーライドを削除(34e296d)。
非推奨化されていたactive_support/core_ext/uri
ファイルを削除(da8e6f6)。
非推奨化されていたactive_support/core_ext/range/include_time_with_zone
ファイルを削除(f0ddb77)。
ActiveSupport::SafeBuffer
でオブジェクトが暗黙でString
に変換されていたのを削除(f02998d)。
Digest::UUID
で定義されている定数に含まれていない名前空間IDを提供すると、誤ったRFC 4122 UUIDを生成する非推奨のサポートを削除(7b4affc)。
config.active_support.disable_to_s_conversion
を非推奨化(e420c33)。
config.active_support.remove_deprecated_time_with_zone_name
を非推奨化(34e296d)。
config.active_support.use_rfc4122_namespaced_uuids
を非推奨化(7b4affc)。
SafeBuffer#clone_empty
を非推奨化(#48264)。
ActiveSupport::Deprecation
をシングルトンとして利用することを非推奨化(#47354)。
ActiveSupport::Cache::MemCacheStore
をDalli::Client
のインスタンスで初期化することを非推奨化(#47340)。
Notification::Event
の#children
メソッドと#parent_of?
メソッドを非推奨化(#43390)
特になし。
変更点について詳しくはChangelogを参照してください。
QueAdapter
を削除(#46005)。特になし。
複数のジョブを一括でエンキューするperform_all_later
が追加(#46603)。
ジョブジェネレータでジョブの親クラスを指定する--parent
オプションが追加(#45528)。
ジョブが破棄されるときにコールバックを実行するafter_discard
メソッドをActiveJob::Base
に追加(#48010)。
バックグラウンドのジョブエンキュー呼び出し元をログ出力するサポートを追加(#47839)。
変更点について詳しくはChangelogを参照してください。
特になし。
特になし。
特になし。
変更点について詳しくはChangelogを参照してください。
特になし。
特になし。
Mail::Message#recipients
にX-Forwarded-To
アドレスを追加(#46552)。
バウンスメールをメーラーのキューを通さずに送信するbounce_now_with
メソッドをActionMailbox::Base
に追加(#48446)。
変更点について詳しくはChangelogを参照してください。
訳注:以下のガイドが新たに追加されました。
Railsを頑丈かつ安定したフレームワークにするために多大な時間を費やしてくださった多くの開発者については、Railsコントリビューターの完全なリストを参照してください。これらの方々全員に深く敬意を表明いたします。
Railsガイドは GitHub の yasslab/railsguides.jp で管理・公開されております。本ガイドを読んで気になる文章や間違ったコードを見かけたら、気軽に Pull Request を出して頂けると嬉しいです。Pull Request の送り方については GitHub の README をご参照ください。
原著における間違いを見つけたら『Rails のドキュメントに貢献する』を参考にしながらぜひ Rails コミュニティに貢献してみてください 🛠💨✨
本ガイドの品質向上に向けて、皆さまのご協力が得られれば嬉しいです。
Railsガイド運営チーム (@RailsGuidesJP)
Railsガイドは下記の協賛企業から継続的な支援を受けています。支援・協賛にご興味あれば協賛プランからお問い合わせいただけると嬉しいです。