今さらだがparamsとルーティングとコントローラー ※大事

 データの受け渡し方(paramsの使い方と考えてもいいかも)は大別すると

link_toによる受け渡し

formメソッドによる受け渡し

に分けられる。

formに関して前にも書いた気がするので今回はlink_toについて考えを整理する。

<%=link_to "リンク先(ただの文字)" new_user_path%>

コントローラー側では一番最初は単なる

@user = User.new

とし、formを入力させてcreateする(ストロングパラメータは必要)までは特にidは含まれていないが、

そこから個別ページをshowしたりeditしてupdateしたりあるいはdestroyする場合には当然idが必要な訳でコントラーラー側では

 @user = User.find(params[:id])

という記述を使うようになる

リンクの方は書き方は

<%= link_to "詳細show" user_path(@user)%> 

等としてidを含めるように書く。最初は必要なかった@userがここで追加されていることに注目

書き方自体は様々あるはずなので

<%= link_to "詳細show" ”users/@user.id" %>

等としてもいけると思うが、なるべく分かり易い物を使う

また、ユーザーに紐づいた画像一覧等になると

まずはネストしたルーティングで

/users/:user_id/picturesという風にuser_idをに紐づいた画像一覧になるようにして

リンクの方で

<%= link_to= "画像一覧へ", user_pictures_path(@user)>

等としてuser_idの情報をリンクに渡してあげて

(もちろん@user=User.find(params[:id])を元のページのshowコントローラで使ってる)

コントローラー側では

@pictures = Picture.where(user_id: params[:user_id])

等としてuser_idに紐づいた写真一覧をwhereで全取得する等とする。

 

 かなり自分の考えで書いてるので間違っているところあるかもしれないので注意。特に三つ目の部分は今作っているものを見ながら書いてるので。ちなみに今作ってる画像一覧ページには新たに投稿するフォームも置いてあるが、その場合コントローラにはフォーム用に@picture = Picture.newも必要になるので注意

 

paramsといっても今回はidに絞ってまとめたが、正しくidを取得出来ていればそこから先のカラムや紐づいたテーブルの先のカラムの取得はたいして難しくないはずなのでidがどんな風に渡っているのかが一番重要だと思う。

 

参考元 https://www.sejuku.net/blog/29763