Railsでパスを指定する方法としてPrefixを用いるとき、引数を渡す必要がある場合をご存知ですか?
そもそもPrefixって?という方にちょっと解説を
Railsフレームワークにてアプリケーションのルーティングを設定する際に登場します。
Prefix
例えばtweetsを表示する、tweetを編集するという2つのルーティングを設定するとしましょう!
ターミナルからアプリケーションのディレクトリにて以下を実行すると
$ rake routes
次のような表に示した内容が表示されると思います。
Prefix | Verb | URI Pattern | Controller#Action |
---|---|---|---|
tweets | GET | /tweets | tweets#index |
edit_tweet | GET | /tweets/:id/edit | tweets#edit |
この時のパスの指定方法の一つがPrefixと言います。
##PrefixとURI Patternの違い
リンク先のルート指定にはPrefix、URI Patternのどちらかを記述しますがこの時に注意すべき点があります。
それは
パスにparamsを含むかどうかです
tweets#indexを指定するパスは
/tweet
tweet#editを指定するパスは
/tweet/:id/edit
こちらのパスはどのツイートか特定するためidが必要です。
しかし、Prefixパスには、表記だけではidの情報を持ちません。
例えば、Prefixパスで指定したlinkタグを作ってみると
link_to tweet_path do #問題なくtweet#indexへ
link_to edit_tweet_path #RoutingError
となります。
そこで変数を引数に渡す必要が出てきます
上記のパスを正しく書き直すと以下のように
link_to edit_tweet_path(@tweet)
ツイートのidを持った変数を引数に渡すことで、正しいパスとなります。
以上で、変数を持つ理由が理解できたと思います。
ここまで読んでいただきありがとうございます。
おかしな部分があればご指摘いただければ幸いです。