LoginSignup
1
1

More than 3 years have passed since last update.

Rails 6.0 でカラムの型を string -> integer に変更する方法

Posted at

ググったら'integer USING CAST(column_name AS integer)'みたいなやり方がでたけどこれは古い書き方のようでエラーが出た。Rails6で上手く行ったのは下記。

20210219164606_change_user_id_in_posts.rb
class ChangeUserIdInPlatforms < ActiveRecord::Migration[6.0]
  def change
    change_column :posts, :user_id, :integer, using: 'user_id::integer'
  end
end

役立ちそうなコマンド

ただしrollbackやマイグレーションファイルの削除は特にチーム開発ではご法度。やらないことを推奨する。

# 戻したいとき
## マイグレーションのバージョン確認
$ rails db:version
## バージョンを戻す(ただし非推奨)
$ rails db:rollback step=2
$ rails db:rollback 20210219164606_change_user_id_in_posts.rb

ただしchangeメソッドで定義した操作のうちremove_columnchange_columnはrollbackすることはできない。そのときはupメソッドとdownメソッドの2つ(migrateはup, rollbackはdown)にマイグレーションファイルを置き換える必要がある(rails db:migrateした後にマイグレーションファイルを変更してrails db:rollbackするみたい‥怖すぎるけど)。

class removeColumnHoge < ActiveRecord::Migration
  def change
    remove_column :hoge, :fuga
  end
end
class removeColumnHoge < ActiveRecord::Migration
  def up
    remove_column :hoge, :fuga
  end

  def down
    add_column :hoge, :fuga, :string
  end
end

その他

投稿とユーザーを紐付ける場合、投稿モデルに持たせるuser_idはintegerじゃなくてreferrenceで持つべきというQiitaもあった。Progateではintegerになってたけど

1
1
0

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
1
1