質問: Review.group(:product_id).order('count_product_id DESC').limit(5).count(:product_id).keys end end``` というコードがあります。 疑問なんですがこのbefore_actionは必要ないのではないでしょうか。 自分の見解↓ before_actionによって「コントローラのアクションが実行される前にそのrankingメソッドを実行することができる」 よって順番的にrankingというメソッドが実行される→ranking_contrlloerのrankingアクションが実行される→review_site.html.erbが呼ばれる アクションとは→コントローラに存在するインスタンスメソッド しかしそもそもrankingというメソッド一つしかこのcontrollerの中にはないのでbefore_actionで指定しなくても必然的にそうなるのでは???
回答: `RankingController` に `ranking` メソッドがあるからといって,これがアクションのメソッドかどうかは(これだけでは)判断できません。 アクションとなるかどうかは,ルーティング次第です。 もし `ranking` がアクションのメソッドなのであれば,確かに ``` before_action :ranking ``` は無駄です。(実験してみましたが,無限ループに陥ったりはしませんでした) 一方,`ranking` がアクションのメソッドでないとすると,このコントローラーはアクションが一つも無いことになり,(このコードが完成形なのであれば)やはりおかしいですね。 いずれにしてもおかしなコードではあると思います。 もう一つおかしな点ですが,`ranking` メソッド中でローカル変数 `product_ids` に代入していますが,これはどこかで参照されることは無いので,無駄な代入です。