Skip to content

Instantly share code, notes, and snippets.

@chadhietala
Created April 22, 2011 16:20
Show Gist options
  • Save chadhietala/936980 to your computer and use it in GitHub Desktop.
Save chadhietala/936980 to your computer and use it in GitHub Desktop.
Many to many and sinatra
require 'sinatra'
require 'datamapper'
DataMapper.setup(:default, "sqlite3://#{Dir.pwd}/cal.db")
class Event
include DataMapper::Resource
property :id, Serial
property :title, String
property :text, Text
property :contact_name, String
property :contact_email, String
property :location, String
property :event_start_time, String
property :event_end_time, String
property :created_at, DateTime
property :approved, Boolean, :default => false
has n, :categories, :through => Resource
end
class Category
include DataMapper::Resource
property :id, Serial
property :name, String
has n, :events, :through => Resource
end
DataMapper.auto_upgrade!
get '/new' do
@page_title = "New Event"
erb :new
end
post '/create' do
@event = Event.new(params[:event])
if @event.save
redirect "preview/#{@event.id}"
else
redirect('/list')
end
end
get '/preview/:id' do
@event = Event.get(params[:id])
if @event
erb :preview
else
redirect('/list')
end
end
============ new.erb ==============
<h3>Create A New Event</h3>
<form action="/create" method="post" id="ad" enctype="multipart/form-data">
<p>
<label>Title:</label><br />
<input type="text" name="event[title]" id="title" />
</p>
<p>
<label>Start Time:</label><br />
<input type="text" name="event[event_start_time]" id="start-time" />
</p>
<p>
<label>End Time:</label><br />
<input type="text" name="event[event_end_time]" id="end-time" />
</p>
<p>
<label>Location:</label><br />
<input type="text" name="event[location]" id="location" />
</p>
<p>
<label>Summary:</label><br />
<textarea name="event[text]" id="summary"></textarea>
</p>
<p>
<label>Category:</label><br />
<input type="text" name="category[name]" id="category" />
</p>
<p>
<input type="submit">
</p>
</form>
============= preview.erb ============
<h1> Preview </h1>
<p>
<b>Title:</b>
<%= @event.title %>
</p>
<p>
<b>Start Time:</b>
<%= @event.event_start_time %>
</p>
<p>
<b>End Time:</b>
<%= @event.event_end_time %>
</p>
<p>
<b>Location:</b>
<%= @event.location %>
</p>
<p>
<b>Summary:</b>
<%= @event.text %>
</p>
<p>
<b>Category:</b>
<%= @event.category_events.count %>
</p>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment