どうも、Railsってやっぱり色々難しいなぁって思うことが多いものです。
さて今回はRailsをやっていたらほぼ絶対に使うであろうredirect_to
でちょっとハマったので、解決策を簡単にまとめておきたいと思います。
結論は「redirect_to
はview上で使えないので、controller上で使いましょう」です。
【Ruby】redirect_toはviewでは使えない件
redirect_toはviewでは使えない
まず私がやりたかったのは「ログインしていないユーザーには、ログイン画面を表示させる」という処理です。
以下のようにview上でif文で分岐させることで、うまく動くかと思ったのですが、うまく動きませんでした。
view
<% if logged_in? %>
#ログインしている場合に表示させる内容
<% else %>
#ログインしていない場合に表示させる内容
<%= redirect_to new_sessions_path %>
<% end %>
理由は「MomethodError」でredirect_to
が定義されていないよという理由からでした。
redirect_toやrenderはcontrollerで使う
どうやらredirect_to
やrender
というメソッドは、コントローラー上でしか使うことができないみたいです。
ですので、コントローラー上でログイン判定するメソッドを使って処理を分岐すれば、思ったような挙動が実現できました。上とほぼ同じ内容をコントローラー上に記載するだけです。
controller
<% if logged_in? %>
#ログインしている場合に表示させる内容
<% else %>
#ログインしていない場合に表示させる内容
<%= redirect_to new_sessions_path %>
<% end %>
しばらくハマっていたので、抜け出せてよかったですが、こんなこともまだまだ知らないので、もっともっと使っていかないといけないですね。では!