LoginSignup
1
0

More than 3 years have passed since last update.

【Rails6】エラー対処法|Directly inheriting from ActiveRecord::Migration is not supported. Please specify the Rails release the migration was written for:

Posted at

RailsでDeviseのセッティング中にmigrationファイルを作成しrails db:migrate (またはrake db:migrate)を実行したところ以下エラーが発生した。これの対処法について。

/app # rails db:migrate
rails aborted!
StandardError: An error has occurred, this and all later migrations canceled:

Directly inheriting from ActiveRecord::Migration is not supported. Please specify the Rails release the migration was written for:

  class AddConfirmableToDevise < ActiveRecord::Migration[4.2]

対処法

migrationファイルの継承したクラス名の末尾でRailsのバージョンを指定する必要がある。Rials6の場合は[6.0]を追記する。

例:20210415115443_migration_file.rb
class AddConfirmableToDevise < ActiveRecord::Migration[6.0]
  処理
end

再度、rails db:migrate を実行。

# rails db:migrate
== 20210415115443 AddConfirmableToDevise: migrating ===========================
-- add_column(:users, :confirmation_token, :string)
   -> 0.0048s
-- add_column(:users, :confirmed_at, :datetime)
   -> 0.0023s
-- add_column(:users, :confirmation_sent_at, :datetime)
   -> 0.0019s
-- add_index(:users, :confirmation_token, {:unique=>true})
   -> 0.0048s
== 20210415115443 AddConfirmableToDevise: migrated (0.0214s) ==================

無事migrationが成功。


エラーの詳細

表示されたエラー内容を見ると

Directly inheriting from ActiveRecord::Migration is not supported. Please specify the Rails release the migration was written for:

class AddConfirmableToDevise < ActiveRecord::Migration[4.2]

クラスActiveRecord::Migrationの直接の継承はサポートされていない。バージョンを指定してください。

例 class AddConfirmableToDevise < ActiveRecord::Migration[4.2]

という記述が書いてある。

つまり、マイグレーションファイルでクラスを継承する場合は、バージョンの指定が必須ということ。


補足

なお、今回はdeviseにconfirmableモジュールを追加するため後からマイグレーションファイルを追加作成したが、初期の$ rails g devise モデル名で自動生成されたマイグレーションファイルにはきちんとバージョンが記載されている。

マイグレーションファイル
class DeviseCreateモデル名複数形 < ActiveRecord::Migration[6.0]
  処理
end
1
0
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
0