Sinatra3時間クッキング・その2
SInatraでブックマークアプリっぽいものを作ってみるテストその2。 VC編。
sequelは直接SQLを叩いたりもできるが、やっぱりMVCっぽくしたいので以下のようにする。
Sequel::Model.plugin(:schema)
Sequel.connect('sqlite://database.db')
class Items < Sequel::Model
unless table_exists?
set_schema do
primary_key :id
string :url
timestamp :created_at
end
create_table
end
end
これで初回に起動すれば、スキーマ通りにDBが作成される。 URLの設計は大したことしてないので略。 コントローラの実装はこんな感じ。
get '/' do
@items = Items.order_by(:id.desc).limit(20)
erb :index
end
説明不要なくらい分かりやすい。パラメータを取る場合はこう。
get '/:id' do
@item = Items.find(:id => params[:id])
erb :show
end
POSTで受け取ってエントリを作成し(いわゆるCRUDのC)、/に飛ばすなら
post '/add' do
Items.create(params)
redirect '/', 303
end
これだけ。
次にMVCのV。 慣れているからerbにしたものの、Railsのerbのように<%=hとか-%>みたいな拡張は使えないので注意。 レイアウトを使う場合には、layout.erbというファイルを用意してガワを書き、actionごとのviewが入る部分に<%= yield %>を挿入すればOK。 ヘルパメソッドを追加するなら、
helpers do
def timeform(time)
time.strftime("%Y/%m/%d %H:%M:%S")
end
end
のように定義しておけば、全てのテンプレート内で使える。