いつもお世話になってます。
今回もどうぞよろしくお願いします。
sqlが複数回発行されているか
- 以下のコードにおいて、↓のslimの3行を指して上司から「sqlが表示部分と合わせて2回発行されているのではないか。1回で済ませられるようにしましょう」とレビューを受けました。(Railsです)
controller
1@reservations = Reservation.where(date: Date.current)
slim
1- if current_user.admin? || current_user.adviser? 2 - if @reservations.exists? 3 = render "reservations", reservations: @reservations
試した事
exists?
を消して、sqlが発行されないようにしてみましたが、それだとif @reservations
が毎回trueになってしまい、望む挙動になりません。- 以下のように、
p
を打って出力を確認した所、---5---
と---6---
の間には
Reservation Exists? (0.3ms) SELECT 1 AS one FROM "reservations" WHERE "reservations"."date" = $1 LIMIT $2 [["date", "2020-08-06"], ["LIMIT", 1]]
が出力されましたが、
---1---
と---2---
の間には何も出力されないので、2回発行されていないと自分は考えています。
ruby
1p "---1---" 2@reservations = Reservation.where(date: Date.current) 3p "---2---" 4 5= p "---4---" 6- if current_user.admin? || current_user.adviser? 7= p "---5---" 8- if @reservations.exists? 9= p "---6---" 10= render "reservations", reservations: @reservations 11= p "---7---"
ですが、この確認方法が合っているかは自信がありません。
上司からは「DBからデータを取ってきて、rubyでデータがあるかどうかのチェックし、データを表示すればSQL発行は1回で済む」と追加でアドバイスがありました(原文ママ)。
これの意味をずっと考えていますが、まだ分かりません。
whereはActiveRecord::RelationなのでSQLの発行はしていないと思うのですが、、
どうぞよろしくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/07 07:55 編集