ActiveRecordのorderメソッドで is null を使いたい
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
が、いま出ている警告がよくわからないのでプルリクを投げたぜ。これはクローズするぜ。
そのプルリクでは、non-attribute argument
というキーワードを raw SQL as argument
に置き換えようとしており、オープンしてから17日経過しているが、レビューされる気配はない。
おわり