facebook twitter hatena line email

「Ruby/rails/migration」の版間の差分

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
()
(syntax error, unexpected '\n', expecting &. or :: or '[' or '.'なエラーが出たとき)
 
(同じ利用者による、間の4版が非表示)
行1: 行1:
 +
==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
 
  rails g migration ChangeColumnToUser
 
作成されたファイルに変更情報を記載
 
作成されたファイルに変更情報を記載
 
  vi db/migrate/20171107223726_change_column_to_user.rb
 
  vi db/migrate/20171107223726_change_column_to_user.rb
 +
 +
==カラム追加する場合==
 +
Userテーブルの場合
 +
$ rails g migration AddColumnToUsers ver:string
 +
 +
$ vi db/migrate/20171112160858_add_column_to_connects.rb
 +
class AddColumnToConnects < ActiveRecord::Migration[5.1]
 +
  def change
 +
    add_column :connects, :ver, :string
 +
  end
 +
end
  
 
==型==
 
==型==
行23: 行67:
 
     change_column :users, :rating, :integer , default: 1500
 
     change_column :users, :rating, :integer , default: 1500
 
  end
 
  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のコマンド時にカラムの間に","を含めるとこうなる

2017年11月13日 (月) 01:37時点における最新版

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

カラム追加する場合

Userテーブルの場合

$ rails g migration AddColumnToUsers ver:string
$ vi db/migrate/20171112160858_add_column_to_connects.rb
class AddColumnToConnects < ActiveRecord::Migration[5.1]
 def change
   add_column :connects, :ver, :string
 end
end

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のコマンド時にカラムの間に","を含めるとこうなる