ビューファイルでインスタンス変数を使う時

どうも、お疲れ様です!

 

IHです!

 

さて、明日に備えて(もう今日ですが。😅)、

寝ようとしていたところでしたが。

 

でしたが、

 

ちょっとどうしてもアウトプットしておきたい事があったので、書いております。

 

それはRailsについてのことなんですが

 

「コントローラーファイルで、アクション内に定義したインスタンス変数は、対応するビューファイルでも使用できる」

 

という内容です。

 

 この私IH、ちょっとこのあたりの理解が曖昧だったのですが、さっきテックキャンプのカリキュラムで復習していたら

 

「あっそういうことか!」

 

と、点と点が繋がる感覚があったので!

 

 忘れずアウトプットしていきたいと思います!

 

 それではいってみよう!

 

 

 

ーーーーーーーーーーーーーーーーーーーーーーー

 

 

 

さて、早速ですが、アウトプットしたい内容は以下の通りです。

 

コントローラーファイル内で

def  アクション名
@インスタンス変数 = モデル名.all
          (またはfind(idの数字)など)
end

 

といったように定義したインスタンス変数は、そのアクションに対応するビューファイルにも、その定義したインスタンス変数を利用する事ができる。

 

  たとえば、postsコントローラーファイルで、indexアクションに

class PostsController < ApplicationController
 def index
  @post = Post.find(1)
 end
end

と記述したら、

 

app/views/postsディレクトリ内の

index.html.erbというビューファイルに、コントローラーのinndexアクションで定義したインスタンス変数を使用できる分です!

 

 それで、ここからがポイントなのですが。

 

 ビューファイルで使いたいからといって、

<%= @post %>

 

と書いてしまっては、エラーが出てしまいます。

(ビューファイルで表示させたい処理があるときは、<%=  %>の間に記述します)

 

 これは、コントローラーで定義した@postには、

postsテーブルの一番目のレコードが丸ごと入っているためです。

 

例えば、postsテーブルの1番目のレコードに以下のようなデータが入っていたとします。(自分のノートです😁)

 

f:id:IH-program:20200720003314j:plain

 

 どうやら一番目のレコードのデータには「idカラム」「contentカラム」「created_atカラム」という3つのカラム(項目)があるようです。それらのカラムの値を見てみると

 

・id:1

・content:はじめまして

・created_at:2020-01-01-00:00:00(レコードが作られた時間は2020年1月1日0時0分0秒ということ)

 

となっています。

 

したがって、ビューファイルで

<%= @post %>

と書いてしまうと、コンピューターが

 

「えっ? いやテーブルの一番目のレコードのデータが欲しいのまではわかるけど、一体どのカラムの値が欲しいのよ!?

id? content? created_at?

アーンあたしわかんない誰か教えて〜!」

 

 何でオネエ口調なんだこのコンピューター、というツッコミは置いといて。

 

 要するに、表示させたい値を1つまで絞ってあげないと、コンピューターがどれを表示させればいいかわからず、混乱してしまうわけですね。その結果、エラーが起きると。

 

 では、どうすればいいの?

 

 簡単です。カラムを指定してあげればいいんです。

 

 具体的な方法としては、

<%= @post.カラム名 %>

と、インスタンス変数の後ろに、カラム名を記述してあげます。

カラム名の前には、(.)ドットを記述することも忘れずに!

 

 つまり、ビューファイルのindex.html.erbで、

postsテーブルの一番目のレコードカラムの

「contentカラム」

を表示させたければ、

<%= @post.content %>

と記述することになります!

 

 

 

ーーーーーーーーーーーーーーーーーーーーーーー

 

 

 いかがでしょうか?

 

 最近、応用カリキュラムの内容が、基礎の時よりちょっと複雑になり、

「うーん、一度今までのRubyRailsの内容を復習しておくほうがいいかもなぁ」

と感じていました。

 

 それで、今日は復習を中心に勉強していこうと思っていたわけですが……。

 いやーいい復習になりました! 今日はちょっとだけ前に進めた気がします!

 

 この調子で、楽しくどんどんプログラミングを学んでいきたいと思います!

 

 それではこの辺で!

 ここまで読んでくださり、ありがとうございました!