Hard work by INTERNET

ベンチャーで働くひとりぼっちWEB開発者が頑張るブログ

ActiveRecordのorderメソッドで is null を使いたい

github.com

SQLのorder by句にActiveRecord経由で is null を使っていて、バージョンを6に上げたら警告が出てきた。よくわからん。

DEPRECATION WARNING: Dangerous query method (method whose arguments are used as raw SQL) called with non-attribute argument(s): "\"psets\".\"order\" is null, \"psets\".\"order\"". Non-attribute arguments will be disallowed in Rails 6.1. This method should not be called with user-provided values, such as request parameters or model attributes. Known-safe values can be passed by wrapping them in Arel.sql(). (called from show at /Users/martijn/dev/course-site2/app/controllers/user_controller.rb:26)

そもそも、この方法はStackOverflowにも書かれていた方法で間違っていないと思う。 is null を使えるようにQueryクラスを拡張してほしい。

みたいなこと書かれた。

これに対して、その警告は Arel.sqlでラップすると収まるぜ。つまり、 Pset.order(Arel.sql("order IS NULL"), :order)`って書けばいい。というコメントが書かれた。

レスポンスへのコメントに対して>>1 が、いま出ている警告がよくわからないのでプルリクを投げたぜ。これはクローズするぜ。

github.com

そのプルリクでは、non-attribute argumentというキーワードを raw SQL as argumentに置き換えようとしており、オープンしてから17日経過しているが、レビューされる気配はない。

おわり