Ruby on Rails Tutorial Chapter 8 Signup Success

I have written the Users controller and Spec tests correctly for the "successful creation" in the User controller however I get the following two errors:

    1) UsersController POST 'create' success should create a user         Failure/Error: lambda do           count should have been changed by 1, but was changed by 0         # ./spec/controllers/users_controller_spec.rb:95:in `block (4 levels) in <top (required)>'

     2) UsersController POST 'create' success should redirect to the user show page         Failure/Error: response.should redirect_to(user_path(assigns(:user)))         ActionController::RoutingError:           No route matches {:action=>"show", :controller=>"users", :id=>#<User id: nil, name: "New User", email: "user@example.com", created_at: nil, updated_at: nil, encrypted_password: nil, salt: nil>}         # ./spec/controllers/users_controller_spec.rb:102:in `block (4 levels) in <top (required)>'

The test specs are as follows:

    describe "success" do        before (:each) do            @attr = { :name => "New User" ,                       :email => "user@example.com",                       :password => "foobar",                       :password_confirmation => "foobar"                     }        end

       it "should create a user" do                 lambda do                  post :create, :user => @attr                end.should change(User, :count).by(1)             end

       it "should redirect to the user show page" do                  post :create, :user => @attr                  response.should redirect_to(user_path(assigns(:user)))             end

       it "should have a welcome message" do                  post :create, :user => @attr                  flash[:success].should =~ /welcome to the sample app/ i             end

       end     end

The controller code is as follows:

    class UsersController < ApplicationController       def show         @user = User.find(params[:id])         @title = @user.name       end

      def new         @user = User.new         @title = "Sign Up"       end

      def create          @user = User.new(params[:user])          if @user.save            redirect_to @user, :flash => { :success => "Welcome to the Sample App!" }          else            @title = "Sign up"            render 'new'          end        end     end

I'm also getting one new error:

3) UsersController POST 'create' success should have a welcome message

     Failure/Error: flash[:success].should =~ /welcome to the sample app/i        expected: /welcome to the sample app/i             got: nil (using =~)      # ./spec/controllers/users_controller_spec.rb:107:in `block (4 levels) in <top (required)>'

Here's the user model code:

    class User < ActiveRecord::Base

      attr_accessor :password

      attr_accessible :name, :email, :password, :password_confirmation

      email_regex = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i

      validates :name, :presence => true,                        :length => {:maximum => 50}       validates :email, :presence => true,                         :format => {:with => email_regex},                         :uniqueness => {:case_sensitive => false}       validates :password, :presence => true,                            :confirmation => true,                            :length => {:within => 6..40}

      before_save :encrypt_password

      def has_password?(submitted_password)         encrypted_password == encrypt(submitted_password)       end

      class << self         def authenticate(email, submitted_password)           user = User.find_by_email(email)           return nil if user.nil?           return user if user.has_password?(submitted_password)         end       end

What's going wrong?