ProgateでRubyOnRailsを学ぶ【コース2はデータベース】

ProgateでRubyOnRailsを学ぶ【コース2】

プログラミングするおじいちゃん

ProgateのRubyOnRailsのコース2はデータベースの知識についてふれていくみたいです。これはかなり内容が濃ゆいんじゃないでしょうか?無料で学べるってのがうれしいですね。

データベースとは

データベースとはデータを保存しておく箱のようなもの、投稿内容などをこのデータベースにためておくことができるようです。イメージとしては投稿投稿ページがデータベースの中に入っていて、それを表示させるにはデータベースからひとつひとつとりだすイメージ

イメージとしてはこんなかんじみたいですね。

データベースのイメージ

投稿一覧ページに対応するコントローラーを作成する

前回のルーティング→コントローラー→ビューの流れを復習。目的に応じて新たなコントローラーを追加する。

コントローラーを追加するコマンド$rails generate controllerをつかって新たなコントローラーを作成する。rails generate controllerはコントローラ名とアクション名を記述するので、

$rails generate cotroller posts index 投稿一覧ページに対応するコントローラー(posts)とアクション(index)を作成

この作業をすることによってcontollerディレクトリにposts_controller.rbファイル、viewディレクトリにはpostsディレクトリが追加されその中にアクション名が記述されたindex.html.erbというファイルが作成される。と同時にscssファイルも作成される

$rails generate cotrollerコマンド実行によって追加されるファイルまとめ

  • controllersディレクトリにcontroller.rbが作成される
  • Viewディレクトリにコントローラーと同じ名前のディレクトリが作成されその中にアクション名が記述された action.html.erbファイルが作成される
  • assetディレクトリにはスタイルを記述される.scssファイルも作成される

この他にもあるかもしれないが、とりあえず↑の3点をおさえておけばよいかもしれない

データベースを扱う専用の文法

<% %>の中で変数の初期化を行う

変数の初期化を行うサンプルは以下

<!-- ここに変数post1を定義して、指定された投稿内容を代入してください -->
<%post1 = "今日からProgateでRailsの勉強するよー!"%>
<!-- ここに変数post2を定義して、指定された投稿内容を代入してください -->
<%post2 = "投稿一覧ページ作成中!"%>

変数の値を表示するには<%= %>の中に変数を記述する

変数の値を表示させるサンプルは以下

<%=post1%>
<%=psot2%>

rubyの文法を使った表示

ここからはrubyの知識が必要になるようだが覚えてもしかたがないかもしれないので調べながらやったほうがいいかもしれない
サンプルコードは以下↓

    <!-- 以下の<% %>を使ってeach文を追加してください -->
<%posts.each do |post|%>


      <div class="posts-index-item">
        <!-- 以下の<%= %>を使って投稿内容を表示してください -->
        <%= post%>
      </div>
    <!-- 以下の<% %>を使ってeach文のendを追加してください -->
    <%end%>

<% %>はRubyの文法を使うことができて、htmlページに表示せない
<%= %>はRubyの文法を使うことができて変数の値をhtmlページに表示させることができるようです。

変数の定義、初期化はアクションで行う

いままで見てきたのはhtmlの中で変数を定義する方法をみてきたわけだが、htmlの中に変数定義などを書いてしまうと、ごちゃごちゃして見にくい。たしかにアクションで定義したほうがわかりやすい。

アクションで変数を定義するときは @記号を使う。

以下はアクションで変数を定義したサンプルコードだ。

class PostsController < ApplicationController
  def index
    # viewで定義していた配列postsを@postsという変数名で定義してください
    @posts = [
          "今日からProgateでRailsの勉強するよー!",
    "投稿一覧ページ作成中!"
      ]
  end
end

アクションをで変数を定義する場合は @記号 をつかうわけだが、htmlで変数を表示するときも @記号 を使わないといけないようだ
以下はhtmlのサンプルコードだ

<div class="main posts-index">
  <div class="container">
    <!-- 変数postsを@postsに書き換えてください -->
    <% @posts.each do |post| %>
      <div class="posts-index-item">
        <%= post %>
      </div>
    <% end %>
  </div>
</div>

データベースの作成

いよいよ投稿内容を保存するためのデータベースを操作していく。$rails generate modelコマンドを実行するとapp/modelsフォルダにモデルが定義されたファイル。db/migrateフォルダにマイグレーションファイルが作成される

データベースに指示するマイグレーションファイルを作成する

データベースのテーブルのイメージ
データベースのテーブルイメージ

マイグレーションファイルを作成するコマンド

$rails generate model テーブル名 カラム名:データ型 テキスト型のレコードをもったのPostテーブルを作成するためのマイグレーションファイルを作成する
→ $rails generate model Post content:text

マイグレーションファイルの場所は「アプリケーション/db/migrate」
マイグレーションファイルを作成しただけではまだテーブルは作成されていない。

テーブルを作成するコマンドを実行する必要がある。

マイグレーションファイルの内容を反映させテーブルを作成するコマンド

$rails db:migrate とくに解説することはなし

テーブルを作成すると自動的にid,created_at,upgreaded_atというカラムが自動的に追加されるようです。
<migrate_table

テーブルのモデル

先ほど$rails generate modelコマンドでテーブルを作ったが、それど同時にモデルが定義されたファイルが作成される

modelの場所は「app/model」さきほどつくったテーブルPostには次のようなモデルが定義されているようだ

class Post < ApllicationRecord

end

PostクラスにApllicationRecordクラスが継承されているらしい

rails console

テーブルに内容を保存するためにはrails consoleを使う

テーブルへの追加

$rails console rails consoleを立ち上げる
$quit rails consoleを抜け出す

railsコンソールにモデルのインスタンスを生成して保存を行う。保存はApllicationクラスのsaveメソッドを使う

post1 = Post.new(content:"どうも")
post1.save

テーブルからデータを取得

変数a = モデル.first 一番最初のレコードを取得
変数a.カラム名 特定のデータを取得
変数(配列)= モデル.all すべてのレコードを取得。データは配列になっている。
配列だからインデックス指定することができる変数(配列)[0]

データベースの内容をhtmlファイルに書き出すサンプルコード

<% @psots.each do |psot|%>
<p> <%=psot.content%></p>
<% end%>

共通のレイアウトファイル

Railsのアプリには共通のレイアウトがあるようです。

そのファイルはapllication.html.erbに記述されていて、場所は「app/views/layouts」たとえば各ページに共通の部分がある場合(headerなど)はこのapllication.html.erbをというファイルに書いておけば、各ページに反映されるようです。

apllication.html.eraには各htmlファイルの内容を表示せるための<%= yeild%>という構文が記述されている。

link_to()メソッドでリンクを作成

link_to(文字, url)とするとリンクタグを再現できる。第二引数のurlはralisのurlを指定するので注意。htmlに埋め込む必要があるので実際には

<%= link_to("文字", "url")%>

のようになる

Progate RubyOnRailsコース2まとめ

  • 目的に応じたコントローラーを作成する
  • 変数定義や初期下はアクションで行う
  • htmlへのruby式展開は<%%>や<%=%>を使って行う
  • データベーステーブルの作成はrails consoleで行う
  • まずは$rails generate modelでマイグレーションファイルを作成
  • $rails db:migrateでテーブルを作成
  • テーブルへデータを追加するにはモデルをインスタンス化して行う
  • htmlにデータを表示するには、アクションで変数を定義し、htmlで変数展開する モデル.allはレコードが配列になっている

引き続き学習をすすめたい。