1
votes

I know this question has been asked before but none of the answers helped me.

I have the following situation.

  • I installed devise (all worked well)
  • Want to include a confirmation mail, so I do

    1. Included :confirmable in the user model
    2. Uncommented the relevant lines in my migrate file (see my whole file below).
    3. Run rake db:migrate (and restarted server)

When I try to sign up now however, I get "" undefined local variable or method `confirmed_at' for X....

What am I missing here?

class DeviseCreateUsers < ActiveRecord::Migration def change create_table(:users) do |t| ## Database authenticatable # t.string :name t.string :email, null: false, default: "" t.string :encrypted_password, null: false, default: ""

  ## Recoverable
  t.string   :reset_password_token
  t.datetime :reset_password_sent_at

  ## Rememberable
  t.datetime :remember_created_at

  ## Trackable
  t.integer  :sign_in_count, default: 0, null: false
  t.datetime :current_sign_in_at
  t.datetime :last_sign_in_at
  t.string   :current_sign_in_ip
  t.string   :last_sign_in_ip

  ## Confirmable
  t.string   :confirmation_token
  t.datetime :confirmed_at
  t.datetime :confirmation_sent_at
  t.string   :unconfirmed_email # Only if using reconfirmable

  ## Lockable
  # t.integer  :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts
  # t.string   :unlock_token # Only if unlock strategy is :email or :both
  # t.datetime :locked_at


  t.timestamps
end

add_index :users, :email,                unique: true
add_index :users, :reset_password_token, unique: true
add_index :users, :confirmation_token,   unique: true
# add_index :users, :unlock_token,         unique: true

end end

1
I am not sure but in that code is t.confirmable is missing or may be same migration with the same file_name exist, so try adding migration file with different nameSonalkumar sute

1 Answers

1
votes

You say, you changed your migration and rerun rake db:migrate.
It's not a good idea to change migrations, that had already been migrated.
Rails does not reconise changes in migrations. So unless you really know, that your last migration is not deployed or checked in yet and all data in your current table can be discarted don't change migrations.

Instead create a new migration that adds the new fields.

If you really know, what you are doing, you can roll back the last (or even a view) migration(s), change it and then run it again:

rake db:rollback STEP=1
# edit your migration
rake db:migrate