ActiveRecordにおいてrewhereメソッドにnilを渡せるようにする

概要

ActiveRecordのrewhereメソッドに引数としてnilが渡せるようになった。 挙動としてはwhere条件がリセットされる。

# before
Post.where(id: 1).rewhere(nil).to_sql
#=> ArgumentError (Unsupported argument type:  (NilClass))

# after
Post.where(id: 1).rewhere(nil).to_sql
#=> "SELECT `posts`.* FROM `posts`"

詳細

上記はreorderメソッドに挙動を合わせたもの。 reorderメソッドにnilを渡すとorder条件がリセットされる。

Post.order(:created_at).reorder(nil)
#=> "SELECT `posts`.* FROM `posts`"

コード

条件をリセットするメソッドとしてunscopeが用意されているため、 引数がnilの場合`unscope(:where)`を呼ぶことで実現している。

プルリクエスト

Allow passing nil to rewhere method by a5-stable · Pull Request #48120 · rails/rails
Motivation / Background This Pull Request has been created because Detail This change allows nil to be passed as a parameter to the rewhere method in ActiveRe...

コメント

タイトルとURLをコピーしました