【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で渡してきたインスタンスインスタンス変数を使う。

ループで展開したりせずに使うときは @単数形 にするらしい。

ふーーーん。慣れない。。。笑

まとめ

  1. viewでそのページへのリンクを作成
  2. controllerでアクションを定義
  3. viewを作成

流れ的にはこれだけ。

疑問点

  • controllerで全部やっちゃってるけど、modelってどうやって使うんだろう