はじめに
今回のカリキュラムで一番躓いたのが、link_toメソッド
だった。もちろん基本的な使い方は理解しているつもりだが、どうもpathの引数がしっくりときていない。
今回の投稿は何かを説明する目的ではなく、自分がコードを読むための記録である。
以下、今回作成したアプリの全link_toを余計な記述はカットして引数の読み方とともに載せる。
全link_toメソッド
①
<%= link_to "ログアウト", destroy_user_session_path, method: :delete %>
<%= link_to "新規投稿", new_prototype_path %>
サインイン状態で表示させている「ログアウト」と「新規投稿」どちらも誰もが共通するページや処理のため、( )で引数を渡す必要がない。
ユーザーによってログアウトページが違うことはないし、ユーザーによって新規投稿ページが違うことはない。
link_toメソッド
はデフォルトでHTTPメソッドがGETのため、ログアウトのときは、第三引数にメソッドを指定する。
②
<%= link_to "ログイン", new_user_session_path %>
<%= link_to "新規登録", new_user_registration_path %>
①と考え方は同じ。今度は非ログイン状態のときの表示。ログイン画面も新規登録もユーザーによって変わることはないから、引数がなくてよい。
③
<%= link_to image_tag("logo.png"), root_path %>
root_pathは引数がなくてもいける!
④
<%= link_to "編集する", edit_prototype_path(@prototype) %>
<%= link_to "削除する", prototype_path(@prototype), method: :delete %>
投稿したものの詳細ページから、編集したり、削除したりする部分。
showアクションの中で、@prototype = Prototype.find(params[:id])
と一つのレコードを選び出しているため、どのprototypeを編集・削除するか判断ができる。
⑤
<%= link_to prototype.title, prototype_path(prototype.id) %>
<%= link_to image_tag(prototype.image), prototype_path(prototype.id) %>
user_pathシリーズ
user_pathはユーザーのマイページに飛ぶ。誰のマイページなのか明らかにするため、引数が必要になる。
<%= link_to current_user.name + "さん", user_path(current_user) %>
ログイン中のユーザー名をクリックするとそのユーザーのマイページに飛ぶ。
deviseのGemを用いることによって使えるcurrent_user
。
<%= link_to "by " + prototype.user.name, user_path(prototype.user.id) %>
prototypeとアソシエーションしているuserのidを取得。
<%= link_to "by " + @prototype.user.name, user_path(@prototype.user.id) %>
誰による投稿か、名前が表示されている部分のコード。
showアクションの中で、@prototype = Prototype.find(params[:id])
と一つのレコードを選び出しているため、prototypeとアソシエーションしているuserのidを取得できる。
<%= link_to comment.user.name, user_path(comment.user.id) %>
誰のコメントか表示されているところのコード。each文で|ブロックパラメーター(変数)にcomment
|が入り、commentとアソシエーションしているuserのidを取得。