こちらEmmanuelです。 久しくお知らせしてきませんでしたが、恙無く過ごしています。 以下は共有したいマージされたプルリクエストの一部です。

MessageVerifier#inspectとKeyGenerator#inspectで秘密情報を表示しないように変更。 コントソールで暗号鍵を呼び出すとき、常に暗号化器の秘密情報が開示されていました。 inspectメソッドをオーバーライドしてクラス名のみを表示するようにし、機密情報が漏洩される事故を防いでいます。

Active Recordの返値、中断、例外発生時のトランザクションのコミット。 このPRに関しては沢山の経緯がありました。 手短かに言うと、Rails 7.1では新しい構成オプションが追加されます。 このオプションでは、トランザクションのブロック内で返値処理の中断例外発生があったとき、トランザクションがコミットされるかロールバックされるかを定義します。 こちらの例を見てみましょう。

Model.transaction do
  model.save
  return
  other_model.save
end

config.active_record.commit_transaction_on_non_local_returnfalseに設定されているとき、トランザクションは返値に突き当たるや否やロールバックします。 trueに設定されている場合、トランザクションはコミットされます。

よくあるActiveStorageの問題をドキュメント化has_many_attached関係へファイルを添付するとき、既定の挙動では既存の添付物を置換します。 しかし、既存の添付物を保存しておいて新しいものを追加したい場合は、Rails.application.config.replace_on_assign_to_manyfalseに設定することでアーカイブできます。 このPRではこの挙動が適切にドキュメント化されています。

has_secure_tokenを生成するタイミングを指定。 Railsにはhas_secure_tokenメソッドがあり、SecureRandom::base58を使ってモデル用の24文字の一意なトークンを生成しています。 このPRにより、on:オプションを介してモデルのライフサイクルのどの時点でトークンが生成されるかを指定できるようになりました。 そのため以下のようなことができます。

class User < ApplicationRecord
  has_secure_token on: :initialize
end

on: :initializeを渡すと、after_initializeコールバックでトークンが生成されます。 これは既定の挙動であるbefore_*コールバックとは対照的です。

この14日間に37名の方々から惜しみない貢献をいただきました。

今日のところは以上です!

Railsからの注目すべきコミット、プルリクエストなどを週報でお届けします。

購読するとこうした更新をメールで受け取れます。