0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2019-04-17

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

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?