## More about Models¶ ↑

Models are used to persist data. That data could be anything. The balance in a bank account, A list of your favorite restaurants, your blog posts, you name it. `Camping` uses the ActiveRecord Gem, an ORM (object-relational mapper), that maps Database tables to objects.

We define models by inheriting from a base model named Base:

    class User < Base end

Very creative. Base is really just an alias for ActiveRecord, nothing fancy. We put our models into a namespaced module named after our App:

    Camping.goes :Nuts

    module Nuts::Models
        class User < Base end
    end

Remember from earlier that Models need to be defined before our controllers, otherwise we can’t use em. So keep them close to the top.

The new User model we’ve defined has a small problem, it’s completely empty, it doesn’t have any data that can be stored in it. `Camping` models map Database tables to objects automatically, but this model doesn’t have a database table yet. To fix that we’ll create a migration:

    Camping.goes :Nuts

    module Nuts::Models
        class User < Base; end

        # Define a migration to add users
        class AddUser < V 1.2
            def self.up
                create_table User.table_name do |t|
                    t.string :username
                    t.string :email
                    t.timestamps
                end
            end

            def self.down
                drop_table User.table_name
            end
        end
    end

Databases, like birds, migrate. Migrations move our database from one configuration to another. In our case we’re adding users. So cool. User’s should be able to log in, sign up, maybe make some pages. We could make the next myspace. To get our database to make a users table we need force our app to create the schema.

    def Nuts.create
        Nuts::Models.create_schema
    end

Now that puppy will migrate when we launch our app.

Our Users now have greater hope to survive. So great. I love it.