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

のように定義しておけば、全てのテンプレート内で使える。