railsでなぜredirect_toにインスタンス変数が使われて、どう処理されているのか。

railsで redirect_to(@user) と書かれていて、

redirectでインスタンス変数ってどゆこと?と混乱した。

user_controller.rb
  def create
    @user = User.new(user_params)
    if @user.save
      log_in @user
      flash[:success] = "Welcome to the Sample App!"

      # この部分!!
      redirect_to @user
      # この部分!!

    else
      render 'new'
    end
  end

新しいユーザをcreateして、最後に画面の描画をどこにするのか指定する部分。

どこに行くって指定されてないじゃん!
と思い調べた所、以下のようになっていました。

まずroutes.rbにて

routes.rb
resources :users

が指定されており、
その結果ルーティングは以下のようになります。
(ターミナルにで rake routesで調べられます。)

terminal
                    users GET    /users(.:format)               users#index
                          POST   /users(.:format)               users#create
                 new_user GET    /users/new(.:format)           users#new
                edit_user GET    /users/:id/edit(.:format)      users#edit
                     user GET    /users/:id(.:format)           users#show
                          PATCH  /users/:id(.:format)           users#update
                          PUT    /users/:id(.:format)           users#update
                          DELETE /users/:id(.:format)           users#destroy

@userで指定した場合はuser GETの部分のルート、showの部分が使われることになります。

terminal

                     user GET    /users/:id(.:format)           users#show

結果として、
redirect_to @user

userのshowアクション(user#show)
を呼び出すことになります。

参考

redirect_toになんでインスタンス変数??

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.