既存のDBを使う場合、現在の状態をschema.rbにして、マイグレーションはその状態をスタート地点として作っていくことになるのかなと思っております。とりあえず、schema.rbの作り方とかを確認してみます。
参考:【Rails】スキーマ情報管理(schema.rbとstructure.sql)
schema.rbの作成
使っているのはMySQLです。とりあえず、schema.rbを作成してみます。
$ rake db:schema:dump
おー作られました。db/schema.rbにあります。sqlファイルを作成することもできるようです。便利っぽいので試してみます。
$ rake db:structure:dump
上記のようにすると、db/structure.sqlが作成されました。
マイグレーションファイルの作成
$ rails g migration create_tables
とやって見ると、マイグレーションファイルが作成されますが、中身は空です。
class CreateTables < ActiveRecord::Migration[5.0]
def change
create_table :tables do |t|
end
end
end
参考:Railsのマイグレーションファイルを既存のスキーマ、データベースを元に作成
空のマイグレーションファイルに、schema.rbの内容をコピペしたらいいようです。
$ rails db:migrate
すでにテーブルは当然ありますが、上記を実行したらマイグレーションが動きました。
== 20170428095931 CreateTables: migrating =====================================
-- create_table("bills", {:force=>:cascade, :options=>"ENGINE=InnoDB DEFAULT CHARSET=utf8"})
-> 0.0287s
.
.
.
-- create_table("price_types", {:force=>:cascade, :options=>"ENGINE=InnoDB DEFAULT CHARSET=utf8"})
-> 0.0312s
== 20170428095931 CreateTables: migrated (0.3061s) ============================
モデルの作成
テーブル内容からモデルを作成するような機能はあるのでしょうか?cakePHPだとbake model Userとかでできますので、同じように出来るかやってみます。
参考:
rails 既存DBを使ってrailsしてみた。
Railsで既存のテーブルをModelとして使用する
下記で空のモデルを作成するということらしい。cakephpの場合、良し悪しは別にして勝手にバリデーションとかまでテーブル構造から推測して作成してくれるけど、そういうのはないのかな?
$rails g model hogehoge
参考:
いつも忘れる「Railsのgenerateコマンド」の備忘録
railsコマンド(rails)
どうもテーブル構造を入力しないと勝手に現状のテーブルあるいは、schema.rbを前提にバリデーション含めて作るとかそういうのはないらしい。あと、cake bake model allみたいなテーブル全部のモデル作るとかそういうのもないらしい。まああんまり必要になることはないか。でも今は使いたかった。
要はテーブル数だけ、上記のrails g model hogehoge
をやるってことか。めんどくさいな。あとデフォルトでは自動でマイグレーションファイルも作成されるらしいので、オフにした方が良さそう。rails g model hogehoge --migration false
とやればいいっぽい。rails g model hogehoge --migration false -s
とやると、すでに存在するファイルはスキップするっぽい。
$ rails g model customers --migration false
$ raiis g model options --migration false
.
.
.