読者です 読者をやめる 読者になる 読者になる

感謝のプログラミング 10000時間

たどり着いた結果(さき)は、感謝でした。

モデルを作って、データベースの値を表示してみる。

Rails
<スポンサーリンク>

Railsの勉強メモ。

database.ymlで使われている設定項目

config以下に、database.ymlというファイルがある。
これは、Railsで使うデータベースに関する設定をまとめたファイルである。
設定項目は以下のような意味がある。

・adapter:データベースの接続に使うアダプターの設定。データベースの種類を指定する。
・database:データベースの配置場所
・pool:データベースの最大接続数
・timeout:タイムアウト時間を示す
・host:データベースサーバの指定
・username:ユーザ名
・password:パスワード
・encoding:データのエンコーディング

命名ルール

モデルの命名規則に従うことで、Railsでモデルを作成することができる。

・モデルのファイル名
基本的にすべて小文字。
基本的にコントローラに揃える。
hoge_controller.rbというコントローラがあったなら、hoge.rbというファイル名で作成する。

モデルのクラス名は、Hogeみたいに、最初は大文字で書く。モデル名は基本的に単数形で作る。

テーブル名は、モデルの名前に複数形の「s」をつけたもの。
Hogeクラスなら、「hoges」という名前でテーブルを作成する。

Railsコマンド

モデルクラスを自動生成するコマンドは以下のとおり。

rails generate model name field:type [・・・] [opts]

name:モデル名
field:フィールド名
type:データ型
opts:動作オプション

例)

rails generate model sample name:string age:integer mail:string tel:string


命名規則に則さないテーブル名を付けたいときは、

class Article < ActiveRecord::Base
  set_table_name 'hoge_tbl'
end

みたいに、モデル側で関連付けるテーブル名を明示的に宣言する必要がある。

マイグレーション

マイグレーションファイルとは、データベースの更新を行うためのファイルのこと。

/[アプリケーションルート]/db/migrate
以下に、「20140408145818_create_samples.rb」のようなファイルができるが、これがマイグレーションファイルです。

中身はこんな感じです。

class CreateSamples < ActiveRecord::Migration
  def change
    create_table :samples do |t|
      t.string :name
      t.integer :age
      t.string :mail
      t.string :tel

      t.timestamps
    end
  end
end
rake db:migrate

でマイグレーションを実行することができます。

シード

シードとは、あらかじめテーブルに用意しておくデータを用意するためのもの。
データの種を用意するようなイメージで、初期データを投入するために使います。

シードの書き方は、

モデルクラス.create(カラム1:値,カラム2:値、・・・)

のように書く。

例)

Sample.create(
  name:"yoshida taisei",
  age:29,
  mail:"yukasawa@dokomo.ne.jp",
  tel:"999-999-999")

シードを追加するRailsコマンドは以下のとおり。

rake db:seed

ちなみに、データベースの作成からスキーマの構築、初期データの投入までをまとめて行う場合は、

rake db:setup

というコマンドを利用する。

それでは、実際にコーディングして、データベースに入っているデータを表示してみよう。
ちなみに、今回見るデータは、samplesテーブルに入っていて、以下のようにデータを確認できる。

~/dev/rails/myapp $ rails dbconsole

sqlite> .tables
authors            books              reviews            schema_migrations
authors_books      fun_comments       samples            users   

sqlite> select * from samples;
1|yoshida taisei|29|yukasawa@dokomo.ne.jp|999-999-999|2014-04-08 15:27:39.740603|2014-04-08 15:27:39.740603
2|saruta tomoko|27|hoge@docomo.ne.jp|888-888-888|2014-04-08 16:00:42.543202|2014-04-08 16:00:42.543202

まずはコントローラから。

・samples_controller.rb

#coding: utf-8
require 'kconv'

class SamplesController < ApplicationController
  def index
    @title = "Model Example"
    @datas = Sample.all
  end

end

Sample.allというのは、対応するテーブルからすべてのデータを取り出すもの。

次にViewを見てみる。
コントローラが突っ込んだモデルの値を表示している。
・index.html.erb

# coding: utf-8
<h2>モデルのデータをテーブルにしてみる</h2>
<table>
<% @datas.each do |data| %>
<tr>
  <td><%= data.name %></td>
  <td><%= data.age %></td>
  <td><%= data.mail %></td>
  <td><%= data.tel %></td>
</tr>
<% end %>
</table>

モデルはこんな感じ。
・sample.rb

class Sample < ActiveRecord::Base
  attr_accessible :age, :mail, :name, :tel
end

これで、実際にブラウザからリクエストを投げると・・・
テーブルの値が表示されることが確認できる。
(キャプチャを貼り付けたいところだが、まだmacに慣れていないため・・・(略))

<参考文献>
Ruby on Rails 3 アプリケーションプログラミング