学習記録

プライベートで学習した内容の備忘録

Ruby on Rails [Model-Controller-View]

Modelの作成

VS Codeで「rails new」 で作成したアプリのフォルダを開きます。

rails generate model モデル名 項目1:型 項目2:型 ...」のような形でコマンドを実行します。

rails generate model book title:string price:integer

上記は「モデル名=book」でフィールドとして「書名」と「価格」を持たせています。

実行すると \app\models\book.rb \db\migrate\yyyyMMddHHmmss_create_books.rb \test\fixtures\books.yml \models\book_test.rb

など複数ファイルが作成されます。

次にデータベースにテーブルを作成します。

上記「\db\migrate\yyyyMMddHHmmss_create_books.rb」を使用します。

rails db:migrate

これで勝手にbooksテーブルが作成されます(^^) Railsが「yyyyMMddHHmmss_create_books.rb」を見つけてきて勝手に実行してくれるらしい...(笑) 「yyyyMMddHHmmss_create_books.rb」が何かというと、テーブル作成するためのコードで
rails generate model book title:string price:integer」で指定した「書名」「価格」をカラムに持つ booksというテーブルを作りますと書かれたコード。たぶん。 なんでbookに勝手にsが付いているのかは謎です(
_*;

テーブルを作ったのでちょっとだけデータを入れます。

「\test\fixtures\books.yml」を使います。 おそらく何件か既に記述されていると思いますが、変更するのであれば"yml"の書き方に従って変更してください。 以下コードでファイルの内容がbooksにインサートされます。

rake db:fixture:load FIXTURES=books

データ入りました(*^^)v

確認方法! SQLite Download Page ↑ ここから「sqlite-tools-win32-x86-3220000.zip(1.62 MiB)」をダウンロードしてsqlite3.exeをC直下のRubyフォルダに配置してください。
(64bit版は提供がないらしいので、32bitのものを使用)

VS Codeのターミナルから下記を実行

rails dbconsole
select * from books

で先ほど入れたデータが表示されるはず! ※「.exit」でdbconsoleを終了できます。

コントローラーからモデルの内容を取得する

「\app\models\book.rb」にはほぼ何も書かれていませんが、親クラスの機能だけで既にDBにアクセスできる状態です。
(ただし、「\config\databace.yml」でDB接続情報を設定していること→デフォルトでsqlite3に接続できる設定になっている)

コントローラーに以下のコードを記述して「/views/xxx/list.html.erb」を作成

  def bookList
    @books = Book.all
  end

「/views/xxx/list.html.erb」には下記を記述します。

<table border=2>
    <tr>
        <th>書名</th>
        <th>価格</th>
    </tr>
    <% @books.each do |book| %>
        <tr>
            <td><%= book.title %></td>
            <td><%= book.price %></td>
        </tr>
    <% end %>
</table>

rails s でサーバーを起動して
「http:locahost:3000/xxx/bookList」にブラウザでアクセス!

DBに登録した内容がブラウザに表示されていれば成功です(*^^)v