views:

99

answers:

1

I want to give the users the ability to change their account info with restful_authentication plugin in rails.

I added this two methods to my users controller:

  def edit
    @user = User.find(params[:id])
  end

  def update
      @user = User.find(params[:id])

      # Only update password when necessary
      params[:user].delete(:password) if params[:user][:password].blank?

      respond_to do |format|
        if @user.update_attributes(params[:user])
          flash[:notice] = 'User was successfully updated.'
          format.html { redirect_to(@user) }
          format.xml  { head :ok }
        else
          format.html { render :action => "edit" }
          format.xml  { render :xml => @user.errors, :status => :unprocessable_entity }
        end
      end
    end

Also, I copied new.html.erb to edit.html.erb. Considering that resources are already defined in routes.rb I was expecting it to work easily, but somehow when I click the save button it calls the create method, instead of update, using a POST HTTP request. Immediately after that it automatically logs out from the session.

Any ideas?

+1  A: 

Could it be possible that the selected user could not be found in your edit method? Then @user is empty and your form thinks that you are creating a new user.

Try to add debugging output in the edit method, like this:

def edit
  @user = User.find(params[:id])
  logger.debug "Found user = #{@user.inspect}"
end

And check if your log messages shows that the user is found or not.

Veger