29
28

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Rails - schema.rb(既存DBを使ったアプリ作成)

Last updated at Posted at 2017-04-28

既存の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

とやって見ると、マイグレーションファイルが作成されますが、中身は空です。

20170428095931_create_tables.rb
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
.
.
.
29
28
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
29
28

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?