Rails 移行で既存のテーブルに列を追加する 質問する

Rails 移行で既存のテーブルに列を追加する 質問する

列が必要な Users モデルがあります:email(最初のスキャフォールディング中にその列を追加するのを忘れました)。

移行ファイルを開いて を追加しt.string :email、 を実行しrake db:migrate、 を取得しましたNoMethodError。次に、次の行を追加しました。

add_column :users, :email, :string

もう一度rake db:migrate、もう一度NoMethodError。ここで手順が抜けているのでしょうか?

移行ファイルはこちらです。

class CreateUsers < ActiveRecord::Migration  
  def self.up  
    add_column :users, :email, :string  
    create_table :users do |t|  
      t.string :username  
      t.string :email  
      t.string :crypted_password  
      t.string :password_salt  
      t.string :persistence_token  

      t.timestamps  
    end  
  end  

  def self.down  
    drop_table :users  
  end  
end

ベストアンサー1

元の移行を既に実行している場合 (編集する前に)、新しい移行を生成する必要があります (rails generate migration add_email_to_users email:stringで問題ありません)。次の行を含む移行ファイルが作成されます。add_column :users, email, string次に を実行するrake db:migrateと、新しい移行が実行され、新しい列が作成されます。

元の移行をまだ実行していない場合は、実行しようとしているように、それを編集することができます。移行コードはほぼ完璧です。行を完全に削除するだけですadd_column(そのコードは、テーブルが作成される前にテーブルに列を追加しようとしており、テーブル作成コードは既に更新されて が含まれていますt.string :email)。

おすすめ記事