Greg です。今週のRails本体に加えられた変更を追いかけていきましょう。
Rails World 2026 アップデート
一般入場チケットの販売が開始されました。CFP(講演募集)は今週末で締め切りとなります。チケットの購入や登壇申し込みは こちら から。
コミュニティレビュー待ちのチュートリアルとガイド
既存のeコマースアプリをベースに、評価、画像アップロード、レーティングによるフィルタリング、管理機能などを備えた「商品レビューシステム」を追加するアドオンチュートリアルが公開されました。レビューに協力いただける方は、PRにフィードバックをお願いします。
また、こちら と こちら の2つの新しいガイドもレビュー募集中です。
ActiveModel::Conversion にデフォルトの #render_in 実装を追加
ActiveModel::Conversion にデフォルトの #render_in が実装されました。例えば、以下のようなビューパーシャルがあるとします。
<%# app/views/people/_person.html.erb %>
<% local_assigns.with_defaults(shout: false) => { shout: } %>
<%= shout ? person.name.upcase : person.name %>
呼び出し側では、Person インスタンスを第一引数として、あるいは :renderable オプションを使ってレンダリングできるようになります。
person = Person.new(name: "Ralph")
render person # => "Ralph"
render person, shout: true # => "RALPH"
render renderable: person # => "Ralph"
render renderable: person, locals: { shout: true } # => "RALPH"
SQLite3 アダプタでの NATIVE_DATABASE_TYPES の freeze を解除
NATIVE_DATABASE_TYPES は、neighbor や activerecord-enhancedsqlite3-adapter といったgemが vector などのカスタム型を登録したり、Hashを拡張したりするために利用する有名な拡張ポイントです。
これまでは .freeze されていたため、これらのgemをロードする際に FrozenError: can't modify frozen Hash でクラッシュしていましたが、この修正で解消されました。
Mandrill ingress で署名が欠落している場合のハンドリング
Mandrillのオーセンティケータにおいて、期待されるHMAC値と比較する前に、署名が存在することを必須とする変更が行われました。署名がない場合は認証に失敗し、署名が不正な場合と同様に 401 Unauthorized を返すようになります。
this_week? に start_day 引数を追加(all_week との整合性向上)
this_week? メソッドがオプションの start_day 引数を受け付けるようになりました。これにより、all_week、beginning_of_week、end_of_week とインターフェースが統一されます。
date.this_week? # グローバルなデフォルト設定を使用(変更なし)
date.this_week?(:sunday) # 日曜〜土曜の週として判定
date.this_week?(:monday) # 月曜〜日曜の週として判定
add_index で式インデックス(expression indexes)に配列構文を許可
add_index メソッドで、式を配列形式で渡せるようになりました。例えば、add_index :users, [ "lower(email)" ] は add_index :users, "lower(email)" と同様に動作します。
# これが正しく動作するようになります
add_index :users, [ "lower(email)" ]
# 複合インデックスとの組み合わせも可能です
add_index :users, [ "lower(email)", :status ]
Active Storage: attach! メソッドの実装
attach の破壊的メソッド(bang method)版である attach! が実装されました。
Active Recordの save! が保存前に無効なオブジェクトを見つけた場合に例外を投げるのと同様に、アタッチメントの保存に失敗した場合に例外を発生させます。
dependent: :purge の予期しない挙動を修正
has_one_attached または has_many_attached で dependent: :purge を指定した際の、予期しない挙動が修正されました。
今週の変更点一覧は こちら から確認できます。
この1週間で、32名 の方がRailsコードベースに貢献してくれました。
それではまた次回!