sinatra で MVC
sinatraとModel
Modelは好きなものを組み合わせる
- ActiveRecord (railsとは独立して使える)
- Data Mapper (より抽象度が高い)
- Sequel (より抽象度が低くシンプル)
- sinatraのシンプルさと相性が良さそう
インストール
ModelとRDB
Modelを格納するには、適切なRDBが必要
- PostgreSQL
- MySQL
- SQLite3 → 今回は、シンプルなこれを使う
インストール
- ダウンロード、解凍
- http://www.sqlite.org/
- http://www.sqlite.org/sqlite-dll-win32-x86-3071401.zip
- dll, def → C:\Ruby193\bin に移動
rubyから使えるように
sinatraとView
Modelは好きなものを組み合わせる
- Erb (rails とは独立して使える)
- Erubis (PHP, Java, JS, C, Perl, Schemaに対応)
- Builder (rubyのメソッドを使う)
- Haml (インデントでタグを表現。yaml的) → 今回はこれを使ってみる
インストール
サンプル:gestbook.rb
require 'rubygems'
require 'sinatra'
require 'sequel'
require 'haml'
Sequel::Model.plugin(:schema)
Sequel.connect('sqlite://guestbook.db')
class Comments < Sequel::Model
unless table_exists?
set_schema do
primary_key :id
string :name
string :comment
timestamp :created_at
end
create_table
end
end
get '/' do
@comments = Comments.order_by(:created_at.desc)
haml :index
end
post '/post_comment' do
Comments.create({
:name => request[:name],
:comment => request[:comment],
:created_at => Time.now,
})
redirect '/'
end
__END__
@@ index
%html
%title Guestbook
%body
%h2 Guestbook
%form{:name => 'post_comment', :action => '/post_comment', :method => 'post'}
%label{:for => 'name'} Name:
%input{:type => 'text', :name => 'name', :size => '20' }
%label{:for => 'comment'} Comment:
%input{:type => 'text', :name => 'comment', :size => '50'}
%input{:type => 'submit', :value => 'post' }
- @comments.each do |comment|
%div
%span&== [#{comment.name}]
%span&== (#{comment.created_at}):
%span&= comment.comment