Reputation: 6555
When I attempt to do an @user.update_attributes(params[:user])
my user is logged out, or what appears to be logged out. I get the message, undefined method 'first_name' for nil:NilClass
. If I go back to my home page I get the log in link. Why is this happening? I've read on stackoverflow that I need to include attr_accessible :admin
but that didn't seem to help at all.
user.rb update method
def update
@user = User.find(params[:id])
if !params[:headshoturl].blank? then
@user.upload_headshot(params[:headshoturl])
end
respond_to do |format|
if @user.update_attributes(params[:user])
format.html { redirect_to @user, notice: 'User was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: "edit" }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
Migration File
class DeviseCreateUsers < ActiveRecord::Migration
def change
create_table(:users) do |t|
## Database authenticatable
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
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 # Only if lock strategy is :failed_attempts
# t.string :unlock_token # Only if unlock strategy is :email or :both
# t.datetime :locked_at
## Token authenticatable
# t.string :authentication_token
# Custom changes
t.string :first_name
t.string :last_name
t.string :user_code
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
# add_index :users, :authentication_token, :unique => true
end
end
routes.rb
devise_for :users do get '/users/sign_out' => 'devise/sessions#destroy' end
resources :users
Upvotes: 0
Views: 796
Reputation: 415
Does params[:user]
include a password
and password_confirmation
? When you update a user's password, Devise signs them out. You can prevent this by writing your own RegistrationsController
and doing sign_in @user, :bypass => true
after updating your user.
About the first_name error, could you make sure that first_name appears in schema.rb? I'm thinking maybe you added it to the DeviseCreateUsers
migration after the migration had already been run. If that's the case you'd want to create a new migration, create first_name and whatever other fields in it, then do a db:migrate.
Upvotes: 2