【Rails】dbに格納したデータをとってくきてページに表示するの実装する【dotinstallでRailsの基礎を勉強したノートその2】
リポジトリはここ。
https://github.com/totzYuta/dotinstall_ruby-on-rails
エピソードごとにコミットするようにした。
routing
リクエストされたURLに対応してどのアクションを実行するのか設定をする
config/routes.rbに以下を追加
root 'projects#index'
詳細を表示する画面を作る
htmlのリンクを生成する
app/views/layouts/application.html.erb
<% link_to project.title, project_path(project.id) %>
かっこ内でidを渡して、次のURLに反映してる。URLは
projects/:id
みたいになる。例えばprojects/1とか。
rake routesでルーティングを確認するのがいい感じ。
例えば以下を見れば、これがprojectsコントローラのshowアクションに対応してることが分かる。
▶ rake routes Prefix Verb URI Pattern Controller#Action projects GET /projects(.:format) projects#index POST /projects(.:format) projects#create new_project GET /projects/new(.:format) projects#new edit_project GET /projects/:id/edit(.:format) projects#edit project GET /projects/:id(.:format) projects#show PATCH /projects/:id(.:format) projects#update PUT /projects/:id(.:format) projects#update DELETE /projects/:id(.:format) projects#destroy root GET / projects#index
なるほど、かならずしもURLはアクションの名前が反映されるわけでもないんだな。
アクションを定義
Controller内で以下のようにshowアクションを定義
def show @project = Project.find(params[:id]) end
URLで渡ってきた数字はparamsで取得することができる。
シンボルの名前はさっきのrake routesで確認する。
ActiveRecordでURLで拾ってきた値でデータベース内を検索してきてる。PHPベタだとDBに接続して、SQL文作って、クエリ発行して。。。ってのがこんだけ。ってことかな。すごいです。
viewを作成する
app/views/projects/show.html.erbを作成する。
アクションの名前とviewのファイルの名前はきちんと一セットになってるわけだ。
<h1>Title: <%= @project.title %></h1>
さっきのcontrollerで渡してきたインスタンスインスタンス変数を使う。
ループで展開したりせずに使うときは @単数形 にするらしい。
ふーーーん。慣れない。。。笑
まとめ
- viewでそのページへのリンクを作成
- controllerでアクションを定義
- viewを作成
流れ的にはこれだけ。
疑問点
- controllerで全部やっちゃってるけど、modelってどうやって使うんだろう