商品の購入用URLに直接アクセスすると、トップページにリダイレクトされるコード



def index
   
  redirect_to root_path unless current_user.id != @item.user.id && @item.order.nil?
end


この記述でリダイレクトされるのは3パターン!
・出品者が購入済の商品にアクセスしようとしたとき
・出品者でない人が購入済の商品にアクセスしようとしたとき
・出品者がまだ購入されていない商品にアクセスしようとしたとき


間違った記述①

redirect_to root_path  
 
↓

redirect_to action: :index  # 間違った記述

これは、トップページを動かすindexアクション内では問題ないんですが、

他のコントローラー内で定義しているindexアクションに、このように記述してアクセスしてしまうと

エラーが起きます。


どこのindexアクションを動かせばいいか、分からなくなるためです。

そのために、root_pathを直接指定します。


間違った記述②

redirect_to root_path unless @item.order.nil?

これは、3パターンのうちの
「出品者がまだ購入されていない商品にアクセスしようとしたとき」
が許されてしまいます。

出品者は自分の商品を購入することはあり得ませんが、
アクセスできないようにしておく必要があります。


最後に

この記述をするためには、@itemに変数を代入する必要があります。
今回は除外していますが、お気をつけください。





ご覧いただきありがとうございます。これはアウトプット用のnoteです。
よろしければアドバイスやコメント等お願いします!


この記事が気に入ったらサポートをしてみませんか?