Help us understand the problem. What is going on with this article?

もそ、プログラミングを学ぶ【Ruby & Rails復習編】【インスタンス変数】〜@があるとき、ないとき〜

More than 1 year has passed since last update.

相変わらずRailsに苦戦中の もそ。
以前書いたコードを一行ずつ分解して復習していますが、改めて見てみると理解があいまいで全然説明できない...。
マトリックスのネオみたいに、私にもプログラミングスキルをインストールしてほしい...。

今日はローカル変数インスタンス変数について書いていきます。

ローカル変数

プログラムの一部分でしか利用できない変数のこと。
Railsの場合だと、たとえばコントローラファイル内で記述すればコントローラファイル内のみで利用できます。

tweets_controller.rb
  def destroy
    tweet = Tweet.find (params[:id])
    if tweet.user_id == current_user.id
      tweet.destroy
    end
  end

こんな感じで、変数名のみを記述します。

インスタンス変数

クラス内の共通の属性として、インスタンスに定義できる変数のこと。
以前、たい焼きにたとえて説明したアレです。

インスタンス変数は、

tweets_controller.rb
  def edit
    @tweet = Tweet.find(params[:id])
  end

こんな感じで頭に@をつけて表記します。

で、どう違うの?

とりあえずいろんな種類の変数があることは分かりましたが、いまいち違いのわからない もそ。

無題1160.jpeg

「え?一緒じゃん?」とか思いがちですが、もちろんこの2つは性質がまったく違います。
(というか性質が一緒だったらわざわざ違う名前と表記にするメリットないですからね...)

さきほど、ローカル変数は限られた場所でしか利用できないと書きました。
ということは、インスタンス変数はその逆で他のファイルでも使う場合に使います。

もう一度インスタンス変数の書かれたコードを参照してみます。

tweets_controller.rb
  def edit
    @tweet = Tweet.find(params[:id])
  end

この記述はtweets_controller.rbというファイルに記述されています。
ということは、ここでコントローラのアクションを定義しているわけですよね。

Railsの処理の流れとして、コントローラはビューに表示をさせる情報を渡します。
つまり、対応するビューファイルに@tweetというインスタンス変数を渡さないといけません
今回の場合だとview/tweets/edit.html.erbというファイルにインスタンス変数を渡しています。

たとえばdestroyアクションで内容を確認せずに削除する場合は、ローカル変数を使います。
でももし削除内容を確認する画面を表示したい場合は、インスタンス変数を使います。

--
いかがだったでしょうか。
前回はparamsについて書きましたが、私はどうもこの変数の理解がふわふわしているようです。
こんなんでロープレやって大丈夫なのか...?ていうか普通に無理ちゃう??
そんな不安を拭えぬまま、今日もコードと睨めっこを続けるもそであった...続く。

moso
プログラミングを学ぶカエルです。絵を描きます。 フロントエンドを目指しているのになぜかサーバーサイドを勉強しています。 HTML/CSS/JavaScript/Ruby/Ruby on Rails/PHP/Laravel/UIUXデザイン
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした