Ruby/rails/migration
提供: 初心者エンジニアの簡易メモ
目次
DBインターフェイス用モデル(マイグレーション)作成
rails generate scaffold user name:string age:integer
db/migrate/20110603100919_create_users.rbに出来ている
DBインターフェイス用モデル(マイグレーション)削除
rails destroy scaffold user
マイグレーション実行
developmentの場合
rails db:migrate RAILS_ENV=development
productionの場合
rails db:migrate RAILS_ENV=production
db/schema.rbができdbにtableが作成される。
マイグレーション実行初期化
以下実行後マイグレーション再実行
rails db:migrate version=0
できたtable
CREATE TABLE `users` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `age` int(11) DEFAULT NULL, `created_at` datetime NOT NULL, `updated_at` datetime NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4
idやageにunsignedが入ってないのに注意。
httpアクセス
ttp://localhost:3000/users
カラムを変更する場合
rails g migration ChangeColumnToUser
作成されたファイルに変更情報を記載
vi db/migrate/20171107223726_change_column_to_user.rb
型
string : 文字列 text : 長い文字列 integer : 整数 float : 浮動小数 decimal : 精度の高い小数 datetime : 日時 timestamp : タイムスタンプ time : 時間 date : 日付 binary : バイナリデータ boolean : Boolean
サンプル
def change change_column :users, :wintimes, :integer , default: 0 change_column :users, :losetimes, :integer , default: 0 change_column :users, :rating, :integer , default: 1500 end
syntax error, unexpected '\n', expecting &. or :: or '[' or '.'なエラーが出たとき
以下のようにカラム名後に","が入ってる可能性があるので
class CreateBattles < ActiveRecord::Migration[5.1] def change create_table :battles do |t| t.integer, :user_id t.integer :losetimes t.timestamps end end end
以下のようにカラム名後の,を削除する
class CreateBattles < ActiveRecord::Migration[5.1] def change create_table :battles do |t| t.integer, :user_id t.integer :losetimes t.timestamps end end end
genrateのコマンド時にカラムの間に","を含めるとこうなる