📌

【Rails】インスタンス変数とローカル変数

2023/06/22に公開

インスタンス変数とローカル変数についてそれぞれの説明をします。

インスタンス変数

インスタンス変数は、RailsのコントローラやViewで使用される変数のことです。インスタンス変数は@記号で始まる変数名で表されます(例:@user@posts)。これらの変数は、同じコントローラ内の異なるアクションやViewファイルで共有されます。

インスタンス変数の特徴は、コントローラのアクション内で定義をし、それから対応するViewに渡すことができます。アクション内で値を設定すれば、その値はViewで利用できます。

インスタンス変数の例:

controllers/users_controller.rb
class UsersController < ApplicationController
  def show
    @user = User.find(params[:id])  # ユーザー情報を取得し、インスタンス変数に代入
  end
end

上記の例では、@userというインスタンス変数にユーザー情報を代入しています。このインスタンス変数は、showアクション内で定義され、それから対応するViewに渡されます。

users/show.html.erb
<h1><%= @user.name %></h1>
<p>Email: <%= @user.email %></p>

Viewファイル内では、インスタンス変数@userに代入されたユーザー情報を表示することができます。

つまりインスタンス変数は、コントローラとViewの間でデータを共有するために使用します。アクション内でインスタンス変数に値を代入すると、それがViewファイルに渡され、表示や処理に使用されます。

ローカル変数

ローカル変数は、コントローラとViewファイルでデータの受け渡しができない変数のことです。インスタンス変数とは違い、変数名の先頭に何もつけない場合はローカル変数となります。

ローカル変数の例:

controllers/users_controller.rb
class UsersController < ApplicationController
  def destroy
    user = User.find(params[:id])  # ユーザー情報を取得し、ローカル変数に代入
    user.destroy  # ユーザーを削除する
    # ここでローカル変数`user`を利用した処理を行う
  end
end

上記の例では、destroyアクション内でユーザーを削除するために、ローカル変数userにユーザー情報を代入しています。このローカル変数はアクション内でのみ使用され、Viewファイルには渡されません。

このように、ローカル変数はアクション内でのデータ操作に利用されます。


まとめ:
インスタンス変数はコントローラ内で定義し、そのデータをViewファイルに渡すために使用します。コントローラでインスタンス変数に値を代入すると、その変数は対応するViewファイル内で利用できます。

ローカル変数はコントローラ内での処理や計算をしたい場合に使用します。ローカル変数はそのアクション内でのみ有効であり、Viewファイルには直接渡されません。

Discussion