Skip to content

Instantly share code, notes, and snippets.

@ymrl
Created June 20, 2011 08:08
Show Gist options
  • Save ymrl/1035282 to your computer and use it in GitHub Desktop.
Save ymrl/1035282 to your computer and use it in GitHub Desktop.
sinatra_bbs_sample

動かし方

SQLiteのインストール

Mac OS Xなら不要。

Windowsは http://www.be-styles.jp/archives/558 あたりを参照

必要なgemnのインストール

gem install sequel sqlite3

実行

ruby app.rb

require 'rubygems'
require 'sinatra'
require 'sequel'
require 'cgi'
Sequel::Model.plugin(:schema)
Sequel.connect("sqlite://db/bbs.db")
configure do
use Rack::Session::Cookie,
:key => 'sc.session',
:expire_after => 24*60*60,
:secret => 'mami_mogu_mogu_gonyo'
set :haml,:format=>:html5
end
helpers do
def h s
CGI.escapeHTML s
end
def hbr s
h(s).gsub(/\n/,'<br />')
end
end
# モデル (プログラムの中で使うデータ) の定義
class Messages < Sequel::Model
set_schema do
primary_key :id
string :name
string :content
timestamp :created
end
end
# データベースにテーブルがなかったら作成
Messages.create_table if !Messages.table_exists?
get '/' do
@messages = Messages.limit(10).order_by(:created).reverse.all
@name = session[:name].to_s
@title = "BBS!!!!"
erb :index
end
post '/new' do
name = params[:name].to_s
content = params[:content].to_s
session[:name] = name
Messages.create(:name=>name,:content=>content,:created=>Time.now)
redirect '/'
end
<h1><%= h @title%></h1>
<h2>新しく投稿する</h2>
<form method="post" action="/new">
<div><input type="text" name="name" value="<%= h @name %>"> </div>
<div><textarea name="content"></textarea></div>
<div><input type="submit" value="送信"></div>
</form>
<h2>これまでの投稿</h2>
<% @messages.each do |m| %>
<div>
<h3><%= h m.name %> さんの <%= h m.created.to_s %> の投稿</h3>
<p><%= hbr m.content %></p>
</div>
<% end %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title><%= @title %></title>
</head>
<body>
<%= yield %>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment