列が必要な 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
)。