Sun~sun~Flower's

〜ITエンジニアとして日々前向きに生きていくノウハウブログ〜

MENU

【初心者向け】【Rails】インスタンス変数とルーティングを使いこなそう!

f:id:mTakata:20200528121753j:plain

現在Railsを勉強していて、インスタンス変数やルーティングについて知りたい。

 

こんにちは。

 

今回は上記の質問に答える記事になります。

 

本記事を読む事で、

・インスタンス変数やその使い方について

・Railsのルーティング

上記が分かりますので、是非読んで頂ければと思います。

 

【目次】

Rails:インスタンス変数の使い方】例題

Railsで次のようなコントローラがあるとします。

```Rails(Ruby)
1 class ArticlesController < ApplicationController
2  def show
3   article = Article.find(params[:id])
4  end
5 end ``` 

showアクションの中にあるarticleという変数ですが、このままだとビューの表示を意図した通りに行うことができません。

 

その理由と解決策を述べてください。 

Rails:インスタンス変数の使い方】模範回答

理由

Railsではコントローラで設定された「インスタンス変数」が、ビュー(view)に渡される仕組みになっています。

 

そして3行目の変数articleは、通常のローカル変数であるためビューで使うことができません。

 

それは何故でしょうか。

❗️ローカル変数は、それが宣言されたアクション内でしか使えないから

上記の理由です。(全ての変数には「スコープ」と呼ばれる、利用範囲たるものが存在しています。)

 

スコープについては、次の記事を読むと理解しやすいと思います。 

www.sunsunflowers.com

なのでビュー(view)に変数articleの中身を表示させる為には、

解決策

💡articleをインスタンス変数として認識される「@article」に変更する

これで、view側で@articleの中身を表示できます。

 

【変更後のコントローラー】

```Rails(Ruby)
1 class ArticlesController < ApplicationController
2  def show
3   @article = Article.find(params[:id])
4  end
5 end ``` 

また、@articleとすることで別のアクションやビューでも「@article」という変数名で使用でき、その変数に格納されたデータを取り扱うことができます。

Rails:ルーティングについて】例題

上記コードの3行目のArticle.find(params[:id])という記述のうち、params[:id]には詳細表示されたいレコードのidが格納されます。

 

なぜそのような動作になるのか、「rails routes」という言葉を使って説明してください。

Rails:ルーティングについて】模範回答

ターミナルで「rails routes」を使いアプリケーションのルーティングを確認すると、通常showアクションには以下のような設定がされています。

```Rails(Ruby)
Prefix Verb   URI Pattern   Controller#Action
tweet  GET    /tweets/:id(.:format)   tweets#show ```
 

そのため、例えば「localhost:3000/tweets/3」というURLを指定すると、「3」が「:id」の値として代入されるイメージです。

 

つまりURL「localhost:3000/tweets/3」を指定すれば、画面上の動作としてはtweet番号(この場合はidを指します)「3」のtweetが詳細表示されるという動きになります。

 

そのため、コントローラー内でparams[:id]と指定することで、詳細表示したいレコードのidを格納することができます。

最後に

今回は、Railsインスタンス変数とルーティングについて解説しました。

 

初学者の方ですと、変数周りのエラーでつまずくことも多いです。

 

ですが本記事で、インスタンス変数について理解できたのではないでしょうか。

 

またルーティングも基礎的な知識でして、データベースを取り扱う処理(CRUD処理)でしたら、ルーティングは必須です。

 

ちなみにCRUD処理については次の記事で詳しく解説していますので、是非よんでみてください。

www.sunsunflowers.com

これも理解できれば、開発がさらに楽しくなりますので、難しいと思いますが頑張ってください! 

 

これでまた一歩、Railsの知識及びエンジニアとしてのスキルが一段上がりましたね。

 

 以上となります、ありがとうございました。