なるようになるブログ

読書感想文かrailsについてかrubyについてか

rails commit log流し読み(2023/06/02)

2023/06/02分のコミットです。

CHANGELOGにのったコミットは以下の通りです。

activerecord/CHANGELOG.md

activestorage/CHANGELOG.md

railties/CHANGELOG.md


Merge pull request #48369 from Shopify/test-rails-console-with-reline

rails consoleのテストを実行するのにreadline-ext gemを使用していたのを、reline(現在のirbのデフォルト) gemを使用するよう修正しています。relineirbのデフォルトであること、及び、現在もアクティブにメンテナンスされている為、との事です。


Merge pull request #48367 from ally1002/guide-back-to-top

guides/assets/stylesheets/main.cssの修正です。

guideで表示しているtopへ戻るボタンの画像のパスが誤っていたのを修正しています。


Merge pull request #48241 from Shopify/populate-autoincremented-column-for-a-model-with-cpk

Active Recordの修正です。

Active Recordのオブジェクト生成時にauto populated columnの設定処理を自動で行うよう修正しています。例えば、 下記のようなschemaがあった場合に、

create_table :posts, id: false do |t|
  t.integer :sequential_number, auto_increment: true
  t.string :title, primary_key: true
  t.string :ruby_on_rails, default: -> { "concat('R', 'o', 'R')" }
end

オブジェクト生成時にauto populated column(上記の場合sequential_numberauto_incrementruby_on_railsdefault function)が計算された状態で設定されるようになっています。

new_post = Post.create(title: 'My first post')
new_post.sequential_number # => 1
new_post.ruby_on_rails # => 'RoR'

Revert deprecation message for prepared statements

activerecord/lib/active_record/connection_adapters/mysql2_adapter.rbの修正です。

mysql2 adapterのprepared_statementsのデフォルト値をRails 7.2で変更する(trueにする)旨出力していたdeprecatedメッセージを削除しています。mysql2 gemのprepared_statements処理にバグがあり、それが解決するまではデフォルトではtrueには出来ない、と判断された為。


Minor changelog edits

activerecord/CHANGELOG.mdの修正です。

各エントリーのフォーマットの修正を行っています。


Merge pull request #48339 from natematykiewicz/activestorage_remove_attachment_empty_string

activestorage/lib/active_storage/attached/model.rbの修正です。

Active Storageのattachmentの削除をするのに、attachmentにnilを指定する必要があった(e.g. User.find(params[:id]).update!(avatar: nil))のを、空文字を指定した場合も削除するよう修正しています。postされたparamsをそのまま指定して削除出来るようにする為。


Merge pull request #45783 from shhavel/fix/anonymous_pg_columns_of_different_type_from_json

activerecord/lib/active_record/connection_adapters/postgresql/database_statements.rbactiverecord/lib/active_record/result.rbの修正です。

PostgreSQLのJSONB型のカラムに対して、arrow operatorとdouble arrow operatorを1つのクエリーに同時に指定した場合に結果が正しく取得出来ないバグがあったのを修正しています。


Support VISUAL env var, and prefer it over EDITOR

railtiesの修正です。

credentialsencryptedなどエディターを使用してデータの編集を行うコマンドで、使用するエディターを指定するのにVISUALという環境変数を使用出来るよう修正しています。元々EDITORという環境変数を使用出来るようになっていたのですが、EDITORedex modeのviなどのフルスクリーンを使用しないエディターを指定する環境変数で、viやemacsなどのフルスクリーンを使用するエディターの場合はVISUALの方が使うべき、という慣習がある為、VISUALの方もサポートするようになっています。なお、VISUALEDITORの両方が指定された場合は、VISUALの方の設定が優先されるようになっています。

参考: environment variables - VISUAL vs. EDITOR – what’s the difference?


Fix polymorphic association subquery

Active Recordの修正です。

has_one/has_many polymorphic relationをwhereでassociationとして指定した場合に、誤ったqueryが実行されてしまうバグがあったのを修正しています。

Before:

Treasure.where(price_estimates: PriceEstimate.all)
#=> SELECT (...) WHERE "treasures"."id" IN (SELECT "price_estimates"."estimate_of_id" FROM "price_estimates")

After:

Treasure.where(price_estimates: PriceEstimate.all)
#=> SELECT (...) WHERE "treasures"."id" IN (SELECT "price_estimates"."estimate_of_id" FROM "price_estimates" WHERE "price_estimates"."estimate_of_type" = 'Treasure')

Merge pull request #48357 from gmcgibbon/belongs_to_cpk

activerecord/lib/active_record/associations.rbactiverecord/lib/active_record/reflection.rbの修正です。

belongs_to associationのvalidity checkでcomposite primary keyのチェックを行うよう修正しています。associationのquery_constraintsの指定とforeign keyの値が一致していない場合に気付けるようにする為。


Merge pull request #48380 from mdh/add-request-session-documentation

actionpack/lib/action_controller/metal.rbのdocの修正です。

request.sessionにdocを追加しています。


Eagerly validate pool arguments in Redis and MemCache stores

Active Supportの修正です。

Redis/MemCache storesで、pool argumentsのチェックをインスタンス生成時に行うよう修正しています。poolに不正な値を指定した場合等に、実行時にエラーになるのを避ける為。


Fix link to ActionController::Cookies#cookies

actionpack/lib/action_dispatch/middleware/cookies.rbのdocの修正です。

ActionDispatch::Cookiesのdoc内のcontrollerのcookiesメソッドのdocへのリンクが誤っていたのを修正しています。