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=[テーブル名]