&tag(マイグレーション);
*目次 [#v5671532]
#contents
*関連ページ [#dd30858c]
-[[Rails]]

*参考情報 [#f8d1da54]

*マイグレーションファイルの単体作成 [#t8235a17]

- 「rails generate migration マイグレーション名」で生成可能。[[NAMAKESUGI |[Rails4] migrationコマンドまとめ:http://namakesugi.blog42.fc2.com/blog-entry-157.html]]
- createから始めたらcreate table、addから始めたらカラムの追加、removeから始めたらカラムの削除用のテンプレートを自動で作ってくれる。
-テーブル生成用のマイグレーション
 bundle exec rails generate migration create_books
-[[Rails4のマイグレーションの書き方まとめ | @cyber_yoshida:http://hyoshida.github.io/2014/12/27/writting-a-migration-in-rails-4.html]]によると、"change"にまとめる方向になっていて、"self.up"や"self.down"はなくなりインスタンスメソッドの"up"や"down"に変更されている。
-属性を変更する場合やカラムを削除する場合はchangeでreversibleを使って記述するか、インスタンスメソッドのup、downに記述する

**例1: テーブル生成 [#t4d00d54]
-booksテーブルを生成する場合。
** テーブル生成 [#t4d00d54]
-booksテーブルを生成する場合以下のコマンドを実行する。
 bundle exec rails generate migration create_books
-以下のようにファイルを書き換える。
-ファイルを書き換える
#pre{{
class CreateHoges < ActiveRecord::Migration
  def change
    create_table :hoges do |t|
      t.string :name
      t.integer :age

      t.timestamps
    end
  end
end
}}

**例2: テーブルに文字列カラムを追加する [#ib05cf4e]

** テーブルに文字列カラムを追加する [#ib05cf4e]
-booksテーブルにimageカラム(文字列)を追加する
 bundle exec rails generate migration add_image_to_books
-以下のようにファイルを書き換える。
-ファイルを書き換える
#pre{{
class AddImageToBooks < ActiveRecord::Migration
  def change
    add_column :books, :image, :string
  end
end

}}

**例2: テーブルにMySQLのLONGTEXTカラムを追加する [#d856bcf4]
** テーブルにMySQLのLONGTEXTカラムを追加する [#d856bcf4]
-":text"だけだとLONGTEXTにならない。, :limitが必要。[[コチョナナバ: railsでmysqlのlongtext型を使う:http://kingyo-bachi.blogspot.jp/2013/06/railsmysqllongtext.html]]
#pre{{
class AddDescriptionToBooks < ActiveRecord::Migration
  def change
    add_column :books :description, :text, :limit => 4294967295
  end
end
}}


*モデルファイル込みで生成 [#s3b2da4d]
-bundle exec rails g model モデル名 カラム定義…で生成する。
 bundle exec rails g model product name:string price:integer

*モデルコントローラービュー込みで生成 [#h16f3094]
-bundle exec rails g scaffold モデル名 カラム定義…で生成する。
 bundle exec rails g scaffold product name:string price:integer
*実行 [#be4a52be]

**通常実行 [#n1cd69c5]
-マイグレーション実行。何も指定しないとdevelopment環境が更新される。
 bundle exec rake db:migrate

**環境を指定して実行 [#p7792130]
-production環境を更新したい場合
 bundle exec rake db:migrate RAILS_ENV=production

**戻す [#r50b0142]
-rollbackを指定する
 bundle exec rake db:rollback

**マイグレーションを再実行 [#u613f246]
-DB削除、DB作成、マイグレーションを全部実行する。
 bundle exec rake db:migrate:reset
-現在のスキーマに基いて実行したい場合は以下のコマンド。
 bundle exec rake db:reset

現在の状態に基いてテーブルを作り直したい場合「db:reset」じゃないとだめ。手作業でテーブル定義を修正していてマイグレーションファイルが不完全な場合、db:resetじゃないとおかしなことになる。[[DBをリセットするrakeタスク二つ - maeshimaの日記:http://maeshima.hateblo.jp/entry/20100412/1271058806]]
**schema.rbの作成 [#i0c9e9ac]
-現在のDBからschema.rbを作成したい場合
 bundle exec rake db:schema:dump
*状態確認 [#scebff42]
**マイグレーションの適用状態を確認する [#c6592d1b]
-db:migrate:statusで現在の状態を確認できる。Statusがupのところが実行済みのもの。
#pre{{
$ bundle exec rake  db:migrate:status

 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20140927082920  Create books
   up     20140927084708  Create hoges
   up     20141121060148  Create software infos
   down    20150409052819  Create settings
}}
-db:versionで現在どこまで進んでいるかを確認できる。
#pre{{
$ bundle exec rake  db:version
Current version: 20141121060148
}}
**現在のdbバージョンを確認する [#p9b4f5c9]
-db:versionで確認できる。
 Current version: 20141208044134


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS