Sun~sun~Flower's

日々前向きに頑張る為のブログ

MENU

【Rails】インスタンス変数とルーティングを使いこなす

こんにちは。当ページにアクセスしてくださり、ありがとうございます。

 

この記事は、プログラミング言語「Ruby」のフレームワーク「Rails」についての記事になります。 

問題.1

以下のようなコントローラがあるとします。

 

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

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

 

その理由と解決策を解説してください。 

解説

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

 

コードのarticleは、通常のローカル変数であるためビューで使うことができません。

 

そのため、articleをインスタンス変数として認識される「@article」に変更すれば大丈夫です。

問題.2

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

 

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

解説

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

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


 
そのため、例えば「localhost:3000/tweets/3」というURLが指定されると、paramsの「:id」というキーのバリューとして「3」が代入されるようになっています。

 

そのため、そのあと呼び出されたコントローラー内でparams[:id]と取り出すことができます。

 

参考になれば、幸いです。

最後まで読んで頂き、ありがとうございました。