LoginSignup
4
7

More than 3 years have passed since last update.

今回使ったlink_toのいろいろ、まとめてみた

Posted at

はじめに

今回のカリキュラムで一番躓いたのが、link_toメソッドだった。もちろん基本的な使い方は理解しているつもりだが、どうもpathの引数がしっくりときていない。

今回の投稿は何かを説明する目的ではなく、自分がコードを読むための記録である。
以下、今回作成したアプリの全link_toを余計な記述はカットして引数の読み方とともに載せる。

全link_toメソッド

application.html.erb

<%= link_to "ログアウト", destroy_user_session_path, method: :delete %>
<%= link_to "新規投稿", new_prototype_path %>

サインイン状態で表示させている「ログアウト」と「新規投稿」どちらも誰もが共通するページや処理のため、( )で引数を渡す必要がない。
ユーザーによってログアウトページが違うことはないし、ユーザーによって新規投稿ページが違うことはない。
link_toメソッドはデフォルトでHTTPメソッドがGETのため、ログアウトのときは、第三引数にメソッドを指定する。

application.html.erb

<%= link_to "ログイン", new_user_session_path %>
<%= link_to "新規登録", new_user_registration_path %>

①と考え方は同じ。今度は非ログイン状態のときの表示。ログイン画面も新規登録もユーザーによって変わることはないから、引数がなくてよい。

application.html.erb
<%= link_to image_tag("logo.png"), root_path %>

root_pathは引数がなくてもいける!

prototypes/show.html.erb
<%= link_to "編集する", edit_prototype_path(@prototype) %>
<%= link_to "削除する", prototype_path(@prototype), method: :delete %>

投稿したものの詳細ページから、編集したり、削除したりする部分。
showアクションの中で、@prototype = Prototype.find(params[:id])と一つのレコードを選び出しているため、どのprototypeを編集・削除するか判断ができる。

prototypes/_prototype.html.erb
<%= link_to prototype.title, prototype_path(prototype.id) %>
<%= link_to image_tag(prototype.image), prototype_path(prototype.id) %>
user_pathシリーズ

user_pathはユーザーのマイページに飛ぶ。誰のマイページなのか明らかにするため、引数が必要になる。

prototypes/index.html.erb
<%= link_to current_user.name + "さん", user_path(current_user) %>

ログイン中のユーザー名をクリックするとそのユーザーのマイページに飛ぶ。
deviseのGemを用いることによって使えるcurrent_user

prototypes/_prototype.html.erb

<%= link_to "by " + prototype.user.name, user_path(prototype.user.id) %>

prototypeとアソシエーションしているuserのidを取得。

prototypes/show.html.erb

<%= link_to "by " + @prototype.user.name, user_path(@prototype.user.id) %>

誰による投稿か、名前が表示されている部分のコード。
showアクションの中で、@prototype = Prototype.find(params[:id])と一つのレコードを選び出しているため、prototypeとアソシエーションしているuserのidを取得できる。

prototypes/show.html.erb
<%= link_to comment.user.name, user_path(comment.user.id) %>

誰のコメントか表示されているところのコード。each文で|ブロックパラメーター(変数)にcomment|が入り、commentとアソシエーションしているuserのidを取得。

4
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
7