ruby on rails6.1.4
Railsから以下のようなSQLを発行したいです。
total順のuserです。
totalがNULLもあるため、COALESCEで0点に置き換えた上でorderしてます。
SQL
1SELECT "users".name , total 2FROM "users" 3LEFT OUTER JOIN "ratings" ON "ratings"."user_id" = "users"."id" 4ORDER BY COALESCE(total,0) DESC , "users"."created_at" DESC
実行結果
name | total |
---|---|
tanaka | 20 |
yamada | 18 |
inoue | 0 |
umehara | 0 |
これをrailsのActiveRecordで指定したいのですが、分からずにいます。
ruby
1order(total: :desc, created_at: :desc)
調べていますが、
Rails 6 以降は order/pluck の引数に SQL 文字列を渡すことはできない (容易に対策可能)
では
ruby
1order(Arel.sql('COALESCE(order_no, 0)'))
のようにArelを使う方法を推奨していますが、
また別のページ、
Arelでクエリを書くのはやめた方が良い5つの理由
では、Arelは推奨されていませんでした。
読んでみましたが、Arelは使わない方が良さそうです。
結局どのような方法で出来るのか分かりません。
分かる方教えていただけると幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/09/05 22:20