4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Rubocop】reversibleなmigrationではない。

Posted at

rubocop のご指摘

C: Rails/ReversibleMigration: change_column_comment(without :from and :to) is not reversible.

何をしたらご指摘を受けたのか

DBのカラムにコメントを追加したいと思い、以下のコマンドを用いてマイグレーションファイルにコメントを追加しました。

$ bundel exec rails g migration AddCommentsToTable

内容

200xxxxxxxxxx..._add_comments_to_table.rb
class Add CommentsToTable < .....
    def change 
        change_column_comment(:hoge, :fuga, 'hogehogefugafugaしたい')
    end
end
$ bundle exec rails db:migrate
確認
$ bundle exec rails db:migrate:status
up 200xxxxxxxxxx... Add comments to table

いけてる。

が、、、、、

実行したコマンド

$ rubocop -a

叱られた。
C: Rails/ReversibleMigration: change_column_comment(without :from and :to) is not reversible.

reversibleではないということは、rollbackしてもupのまま...?

$ bundle exec rails db:rollback
up 200xxxxxxxxxx... Add comments to table

upのままだ。

原因

change_columnではrollbackできないということだった。(railsガイドより)

change_columnコマンドは逆進できない(可逆的でない)点にご注意ください。

マイグレーションファイルで使用するchangeメソッドでは逆進の処理もやってくれるものだと思い込んでいました。

なので、今回マイグレーションはできたが、ロールバックのコマンドを打ってもUPのままだったみたいです。

解決法

upメソッドかdownメソッドをchangeメソッドの代わりに用いる

200xxxxxxxxxx..._add_comments_to_table.rb
class Add CommentsToTable < .....
    def up 
        change_column_comment(:hoge, :fuga, 'hogehogefugafugaしたい')
    end
end
$ bundle exec rails db:rollback
down 200xxxxxxxxxx... Add comments to table
$rubocop -a

いけた。








changeメソッドが使用できる定義についてこちらの記事にまとめられています。 https://prograshi.com/framework/rails/change-method-in-migration/

参考

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?