続 Sinatra の MVC の M に Sequel を使ってみる
前回は DB の検索しか行わなかったので、登録、更新、削除機能を追加した。
コントローラ
require 'rubygems' require 'sinatra' require 'sequel' Sequel::Model.plugin(:schema) Sequel.connect('sqlite://myapp.db') class Items < Sequel::Model unless table_exists? set_schema do primary_key :id string :name timestamp :created_at end create_table end end get '/' do @items = Items.all haml :index end get '/item/:id' do @items = Items.filter('id = ?', params[:id]) haml :index end post '/item' do Items.create( :name => request[:name], :created_at => Time.now ) redirect '/' end put '/item/:id' do Items.filter('id = ?', params[:id]).update(:name => request[:name]) redirect '/' end delete '/item/:id' do Items.filter('id = ?', params[:id]).delete redirect '/' end
ビュー
汚いなぁ。まぁ、モデルの使い方がメインなので、これはこれでよし。
!!! XML !!! %html %form{:method => "POST", :action => '/item'} %input{:type => "text", :name => "name"} %input{:type => "submit" :value => "create "} - @items.each do |item| %div %form{:method => "POST", :action => "/item/#{item.id}"} %input{:type => "hidden", :name => "_method", :value => "PUT"} %input{:type => "text", :name => "name", :value => item.name} %input{:type => "submit" :value => "update"} %form{:method => "POST", :action => "/item/#{item.id}"} %input{:type => "hidden", :name => "_method", :value => "DELETE"} %input{:type => "submit" :value => "delete"}