ぺんぎんのRails日記

ぺんぎん。エンジニア経験ゼロ。Rails勉強中。

【備忘録】パスのあとのインスタンス変数

link_toやredirect_toなどで次のようなパスを見ることがあります。

redirect_to user_path(@user)
redirect_to @user

この二つは同じ動きをしますが、なぜパスのあとにインスタンスを入れているのでしょうか?

次のコードについて考えてみましょう。このコードから生成されるURLはなんでしょうか?

redirect_to user_path(10)

実はこの10はidを指しているんです。
そのため生成されるURLは「users/10」のようになります。

では、最初に取り上げたコードは何を指すのかというと、 呼び出されたインスタンスのidを代入していることになります。

@user = User.new(user_params)
if @user.save
  redirect_to @user
end

User.newで生成されたユーザーのidがURLに代入されてビューが表示されます。

参考

Rails のルーティング - Railsガイド

第7章 ユーザー登録 - Railsチュートリアル