商品の購入用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です。
よろしければアドバイスやコメント等お願いします!
この記事が気に入ったらサポートをしてみませんか?