ググったら'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_column
やchange_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になってたけど