寝て起きて寝て

プログラミングが出来ない情報系のブログ

RailsでActive Recordを使う前準備

めっちゃ前に一度使ったけど忘れたのでどんなことをやっていたのかを詳しくメモっておく

予備知識

まずActive Record経由でデータベースに接続するには config/database.ymlに定義する必要がある。

database.ymlはYAML形式で記述する必要がある。

YAMLは「パラメータ名:値」の形式でパラメータを表すのが基本。また階層はインデントで表現する。

例: production: adapter: sqlite3 database: db/production.sqlite3 pool:5 timeout:5000

のように初期で記述されている。

注意しなくてはいけないのがインテントではタブ文字を使えないのでインデントの空白は必ず空白(スペース)にする必要がある

モデルクラスの作成

データベースのテーブルにアクセスするためのモデルクラスを作成する必要がある これはコントローラークラスを作成でも利用したrails generateコマンドを使う

rails generate model name field:type […] [options]

例 プロジェクト内でbookモデルを作成したい場合

bundle exec rails generate model book isbn:string title:string price:integer publish:string published:date cd:boolean

と打つと

invoke active_record
create db/migrate/201605311113_create_books.rb  ←マイグレーションファイルの作成
create app/models/book.rb ←モデルクラスの作成(booksテーブルを操作するためのモデル本体)
ivoke test_unit
create test/models/book_test.rb ←モデルクラスをテストするためのスクリプト
create test/fixtures/books.yml ←テストデータを投入するためのフィクスチャファイル

複数形になるのはactive recordの仕様だった気がする

マイグレーションファイルを使いテーブルの作成

今の状態だとデータベースが作成されていないのでマイグレーションファイルを使ってテーブルを作っていく。 Railsではテーブルの作成や修正にマイグレーションという機能を利用する。 マイグレーションは、テーブルレイアウトを作成/変更するための仕組み。 マイグレーションを利用するとテーブルの保守の作業を半自動化することができる。またレイアウト変更が生じた場合にも簡単に反映できる。

フィクスチャとは

Railsではテストデータをデータベースに流し込むための仕組みとしてフィクスチャという機能を提供している ここでデータベースの中身を記述しておくことによって、以下のコマンドでinsertしてくれる

bundle exec rake db:fixtures:load FIXTURES=[ファイル名] ←今回はbooks

データベースクライアントを使う

rails dbコマンドを使うとデータベースの内容を確認することができる

bundle exec rails db

sqlite> .tables ←テーブルの一覧を表示
books   schema_migrations

sqlite>.schema books ←booksテーブルの構造を確認

sqlite>select * from books; ←SQL構文

sqlite>.quit    ←閉じる

これでデータベースの準備ができた。

まとめ

モデルで扱うことができるデータベースを作るときは

rails generate

でデータベースのテーブルにアクセスするためのモデルクラスを作成する

rake db:migrate

でテーブルを新規に作成する

テストデータがある場合

rake db:fixtures:load FIZTURES=[テーブル名]