LoginSignup
1
1

More than 3 years have passed since last update.

なぜredirect_to @userでユーザーページにリダイレクトできるのか詰まったのでその訳を説明する

Posted at

Rails turtorialの7.4.1「フォームの完成」の章をやっている際、redirect_to @userでなぜユーザーページにリダイレクトのか分からず詰まったのでそれに関して説明していきます。

まず初めに以下のコードをご覧ください。

app/controllers/users_controller.rb
class UsersController < ApplicationController
 .
 .
 .
 def create
   @user = User.new(user_params)
   if @user.save
     redirect_to @user
   else
     render 'new'
   end
 end

 private

   def user_params
     params.require(:user).permit(:name, :email, :password,
                                  :password_confirmation)
   end
end 

ここで、
redirect_to @user
といった行がありますが、これは次のコードと等価になります。
redirect_to user_url(@user)

これはredirect_to @userというコードからuser_url(@user)といったコードを実行したいということを、Railsが推察してくれた結果になります。

つまりuser_urlにリダイレクトするという記述が省略されているという事。

ではここで、次の疑問としてuser_url(@user)(@user)は何を表しているのという疑問があります。

これは結論から言うとuser_urlにリダイレクトした時にエラーを返さない様にする為です。

基本的にuser_url/users/:idの様なURLになっていることが多いです。

以下参照
スクリーンショット 2019-06-03 17.28.45.png

redirect_to user_urlだけでは:idの部分に何が入るのか分からない為、/user/:idにアクセスした時にエラーとなります。
この:idの部分に何が入るかを指定するのが(@user)の部分です。
引数に@userと指定することでその変数に格納されたレコードに該当するページへのURLとなります。

つまりこの(@user)はインスタンス変数ではなく:idを入れる為にあるもの。

まとめると、
redirect_to @userというコードはuser_url(@user)といったコードを実行したいということを、Railsが推察してくれた結果である。
(@user)user_urlにリダイレクトした時にエラーを返さない様にする為にある。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1