Posted at

Prefixに渡す引数とは

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の違い

リンク先のルート指定にはPrefixURI 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を持った変数を引数に渡すことで、正しいパスとなります。

以上で、変数を持つ理由が理解できたと思います。

ここまで読んでいただきありがとうございます。

おかしな部分があればご指摘いただければ幸いです。