Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
36
Help us understand the problem. What are the problem?
@akk11_k

Prefixに渡す引数とは(Rails 初学者向き)

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を持った変数を引数に渡すことで、正しいパスとなります。

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

ここまで読んでいただきありがとうございます。
おかしな部分があればご指摘いただければ幸いです。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
36
Help us understand the problem. What are the problem?