railsでアクションを定義するときに受け取るデータを
params[:id]
と表現することが多かったのだけどいまいち意味がわかっていなかったのでメモ。
同じようなことで悩んでいる方の参考になればと思う。
前提条件
例えばこんな感じで投稿を表示する画面で投稿の詳細を確認する機能を実装したかったとする。
詳細表示するアクションはshowアクションなのでコントローラーにshowアクションを定義しつつそれに対応するビューを用意してあげると良さそう。
showアクションの設定
多くのrailsの学習サイトなどではshowアクションは以下のように表現されていることが多いんじゃないかと思う。
def show
@post = Post.find(params[:id])
end
これは以下のように分解できて、それぞれ以下のような意味である。
Post…Postモデル。データベース上に保存されたPostのデータ
find…Postモデルから条件に一致するものを指定して取得する方法
params[:id]:…findで取得してくるデータの条件
params…特定のツイートのURLを開いたときなどにくっついてくるデータ
:id…ツイートに紐付いたid
つまりこれでPostモデルの中からユーザーがアクセスしようとしているpostのidに対応しているデータを拾ってきます、という意味になる。
@post…上記を外部のデータ(というかビュー)でも使えるようにインスタンス変数に代入
で、それをインスタンス変数に代入することでビューファイルに表示できるようにしているわけです。
実際にルーティングを調べてみると
post GET /posts/:id(.:format) posts#show
postsコントローラーのshowアクションに対応するルーティングのパスはpost/:idとある。この:idというのがここのpostに対応しているので、showアクションで呼ぶビューには同じidのpostが表示されるようにしたい。なのでshowアクションで上記に書いたように@postを定義してビューに読み込んでいるのだ。