sinatra で MVC
sinatraとModel
Modelは好きなものを組み合わせる- ActiveRecord (railsとは独立して使える)
 - Data Mapper (より抽象度が高い)
 - Sequel (より抽象度が低くシンプル)
 - sinatraのシンプルさと相性が良さそう
 
インストール
- gem install seque
 
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から使えるように
- gem install sqlite3
 
sinatraとView
Modelは好きなものを組み合わせる- Erb (rails とは独立して使える)
 - Erubis (PHP, Java, JS, C, Perl, Schemaに対応)
 - Builder (rubyのメソッドを使う)
 - Haml (インデントでタグを表現。yaml的) → 今回はこれを使ってみる
 
インストール
- gem install haml
 
サンプル: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
0 件のコメント:
コメントを投稿