概要
Railsでモデルによりフォームやデータベースとのやり取りをする流れ。
- プロジェクト生成時にDBMSを指定
- database.ymlを編集してデータベースを生成
- モデルを生成
- マイグレーションでテーブルを生成
- モデルでフォームデータを取得
- モデルでテーブルを読み書き
プロジェクト生成時
プロジェクト生成時にDBMSを指定する。
- Rails2.0.2以降ではデフォルトデータベースがMySQLからSQLiteに変更
- MySQLを使う場合、プロジェクト生成時に以下の様に指定
rails generate project_name -d mysql
rails generrate project_name --database=mysql
データベースの生成・操作
database.ymlの編集
config/database.yml
ファイルの内容を設定・変更
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
default: &default #adapter: sqlite3 adapter: mysql2 # MySQLを使う設定になっているか確認 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> timeout: 5000 encoding: utf8 username: root # MySQLのユーザー名を確認 password: **** # MySQLのパスワードを確認 development: <<: *default #database: db/development.sqlite3 database: **** # 利用するDB名を設定 test: <<: *default #database: db/test.sqlite3 database: **** # 利用するDB名を設定またはコメントアウト production: <<: *default #database: db/production.sqlite3 # 利用するDB名を設定またはコメントアウト |
データベースの生成
以下のコマンドでdatabase.yml
の設定に従ってデータベースを生成。
rails db:create
データベースの確認
以下のいずれかの方法で、アプリケーションのデータベースを確認できる。
mysql -u user -p
を実行してMySQLのコンソールに入る- プロジェクトディレクトリー内で
rails dbconsole
を実行して、アプリケーションが使うデータベースをuseした状態でMySQLのコンソールに入る
データベースの削除
以下のコマンドでアプリケーションで使っているデータベースが削除される。有無を言わさずすべてのテーブルごと消えてしまうので注意。
rails db:drop
実行例
database.yml
データベース名を設定する。以下はdemo_app
アプリケーションでdemo_app_db
を使う設定。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
[vagrant@localhost demo_app]$ cat config/database.yml ..... default: &default adapter: mysql2 encoding: utf8mb4 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: root password: vagrant socket: /var/lib/mysql/mysql.sock development: <<: *default database: demo_app_db ..... |
データベースの生成
rails db:create
コマンドでdatabase.yml
の設定を使ってデータベースを作成する。
1 2 |
[vagrant@localhost demo_app]$ rails db:create Created database 'demo_app_db' |
rails dbconsole
コマンドでデータベースが作成されたことを確認。
1 2 3 4 5 6 7 8 9 10 11 12 |
mysql> show databases; +--------------------+ | Database | +--------------------+ | demo_app_db | | information_schema | | mysql | | performance_schema | | sys | | testdb | +--------------------+ 6 rows in set (0.00 sec) |