Sinatra ActiveRecord Extension
Extends Sinatra with extension methods and Rake tasks for dealing with an SQL database using the ActiveRecord ORM.
Setup
Put it in your Gemfile, along with the adapter of your database. For
simplicity, let's assume you're using SQLite:
gem "sinatra-activerecord"
gem "sqlite3"
gem "rake"
Now require it in your Sinatra application, and establish the database connection:
require "sinatra/activerecord"
set :database, "sqlite3:///foo.sqlite3"
Alternatively, you can set the database with a hash or a YAML file. Take a look at this wiki.
Note that in modular Sinatra applications you will need to first register the extension:
class YourApplication < Sinatra::Base
register Sinatra::ActiveRecordExtension
end
Now require the rake tasks and your app in your Rakefile:
require "sinatra/activerecord/rake"
require "./app"
In the Terminal test that it works:
$ rake -T
rake db:create_migration # create an ActiveRecord migration
rake db:migrate # migrate the database (use version with VERSION=n)
rake db:rollback # roll back the migration (use steps with STEP=n)
And that's it, you're all set :)
Usage
You can create a migration:
$ rake db:create_migration NAME=create_users
This will create a migration file in your migrations directory (./db/migrate
by default), ready for editing.
class CreateUsers < ActiveRecord::Migration
def change
create_table :users do |t|
t.string :name
end
end
end
Now migrate the database:
$ rake db:migrate
You can also write models:
class User < ActiveRecord::Base
validates_presence_of :name
end
You can put your models anywhere you want, only remember to require them if
they're in a separate file, and that they're loaded after require "sinatra/activerecord".
Now everything just works:
get '/users' do
@users = User.all
erb :index
end
get '/users/:id' do
@user = User.find(params[:id])
erb :show
end
A nice thing is that the ActiveRecord::Base class is available to
you through the database variable:
if database.table_exists?('users')
# Do stuff
else
raise "The table 'users' doesn't exist."
end
History
This gem was made in 2009 by Blake Mizerany, creator of Sinatra.
Social
You can follow me on Twitter, I'm @m_janko.