LoginSignup
1
0

More than 3 years have passed since last update.

migrate出来なかった時のお話

Last updated at Posted at 2021-01-19

凡ミスでmigrate出来なかった時のお話

  1. rails g modelコマンド

  2. rails db:migrateコマンド

  3. 本題のerror発生

  4. 仮設・検証

  5. 解決

上記の5段構成で進めていきます。

本題に急いでいる方は
本題のerror発生から飛んで下さい。
以降、一部補足をしながら進めていきます。

rails g modelコマンド

rails g modelコマンドでモデルを作成したとき、
db/migrate/ディレクトリにmigrationファイルが同時に生成される。

migrationファイルの中身はこんな感じ

db/migrate/20XXXXXXXXXXXX_create_複数形のモデル名.rb
class Createモデル名の複数形 < ActiveRecord::Migration[6.0]
  def change
    create_table :モデル名の複数形 do |t|

      t.timestamps
    end
  end
end

% rails g model 単数形モデル名
generateの略で、生成するの意味がある。
基本的に、コントローラー名は複数形、モデル名はそれに対応する単語の単数形になる。

補足情報 :% rails d model 単数形モデル名
destroyの略で、削除するの意味がある。

rails db:migrateコマンド

migrationファイルにデータベースに保存したいカラムの型とカラム名を指定して、
% rails db:migrateとコマンドを打ち込みmigrationを実行する流れになるのだが...

% rails db:migrate
この動作は、マイグレートと呼ばれることがある。

migrationが実行できない

migrationが実行できず、ターミナルには以下のerror文が...

== 20210119052352 CreateAddresses: migrating ==================================
-- create_table(:addresses)
rails aborted!
StandardError: An error has occurred, all later migrations canceled:

undefined method `steing' for #<ActiveRecord::ConnectionAdapters::MySQL::TableDefinition:0x00007fbc8955f760>
Did you mean?  string

~~省略~~

bin/rails:3:in `load'
bin/rails:3:in `<main>'

Caused by:
NoMethodError: undefined method `steing' for #<ActiveRecord::ConnectionAdapters::MySQL::TableDefinition:0x00007fbc8955f760>
NoMethodError: undefined method `steing' 

~~省略~~

bin/rails:3:in `load'
bin/rails:3:in `<main>'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)

errorの仮設・検証スタート

長々と出てきましたが、現状の私が着目したのは以下の3点

1. StandardError: An error has occurred, all later migrations canceled:`
2. undefined method `steing' for #
3. Did you mean?  string

カラムの型を指定した際に手打ちしていた事によってスペルミスの可能性が浮上してきました。

追求はしませんでしたが、StandardErrorとある上記のerror文に関しても
こうして整理していくと気になってくる。

検索結果 :rails db:migrate:reset
データベースのリセットを行ってerror解決している記事を発見。
だが、今回の場合Did you mean?  stringの表記が
決め手になっていた様に捉えて間違いなかったようだ。

解決

この後migrationファイルを見直して予想通りsteingを発見。

== 20210119052352 Createモデル名の複数形: migrating ==================================
-- create_table(:モデル名の複数形)
   -> 0.3171s
== 20210119052352 CreateAddresses: migrated (0.3174s) =========================

無事migration完了

もし仮にカラム名を間違っていたらerrorも吐かれずrollbackしていた事でしょう。

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