🔥
【Rails】「@」とはなんぞや?MVCモデルと理解する
はじめに
Rails Tutorial「7.1.2 Userリソース」の章の内容を一部引用させていただきます。
結論
「@」記号は、インスタンス変数を表します。
インスタンス変数とは?
- インスタンス変数は、オブジェクトの状態を保持するために使用されます。
- コントローラーからビューへデータを渡す際に重要な役割を果たします。
これだけでは「なんのこっちゃ」という話なので、以下の具体的なコードでインスタンス変数を確認していきましょう。
コード
users_controller.rb
def show
@user = User.find(params[:id])
end
users_show.html.erb
<%= @user.name %>, <%= @user.email %>
Local環境
どのような流れでUser情報がブラウザへ?
- データベースに格納されているUser情報が、モデルを介してコントローラーへと渡されます。
- コントローラー内で、User.find(params[:id])によって特定のUser情報を取得します。
- 取得したUser情報を@user(インスタンス変数)に格納します。
- @userをビューへ渡すことで、データベースのUser情報がブラウザに表示されます。
▼以下MVCモデルの添付画像に↑上記番号を付与しました
※以下のツールを利用して↑上記画像を作成
- データベースに格納されているUser情報が、モデルを介してコントローラーへと渡されます。
- コントローラー内で、User.find(params[:id])によって特定のUser情報を取得します。
users_controller.rb
User.find(params[:id])
- 取得したUser情報を@user(インスタンス変数)に格納します。
@user = User.find(params[:id])
- @userをビューへ渡すことで、データベースのUser情報がブラウザに表示されます。
users_show.html.erb
<%= @user.name %>, <%= @user.email %>
もし、「@」が無し(ローカル変数)だと以下のエラーが出ます
ローカル変数(例:user)とインスタンス変数(例:@user)の違い
読者の皆様はすでにお気づき(あるいはご存じ)かもしれませんが、
ローカル変数とインスタンス変数の主な違いは、そのスコープとアクセス可能な範囲にあります。
ローカル変数(例:user)
- 特定のメソッド内でのみ有効な変数です。
- メソッドの外部からはアクセスできません。
インスタンス変数(例:@user)
- コントローラーのアクション内で定義され、ビューなどのメソッド外部からもアクセス可能な変数です。
- これにより、コントローラーからビューへデータを渡すことができます。
※ちなみにグローバル変数(例:@@user)もあるが、ここでの説明は割愛
まとめ
「@」記号は、Railsにおいてインスタンス変数を示し、MVCアーキテクチャにおけるデータの流れをスムーズにします。ローカル変数とインスタンス変数を適切に使い分けることで、Railsアプリケーションの効率的なデータ管理が可能になります。
参考
Discussion