Ramaze ver. 2008.06(とSequelとErubis)使ってみた
チュートリアルといえば掲示板だと思うので掲示板をつくってみた。
インストール
gemでいろいろ入れる。aptでSQLite3とかもいれとく。
# sudo gem install ramaze sequel erubis thin # ramaze -v Ramaze Version 2008.06, on ruby 1.8.6 (2007-09-24) [i486-linux]
プロジェクト作成
# ramaze --create bbs # cd bbs
Model
前から気になってたSequelを使う。MerbやRailsみたいにdatabase.ymlとかないので生で扱う。
# vim model/post.rb require "sequel" DB=Sequel.sqlite "sqlite.db" class Post < Sequel::Model set_schema do primary_key :id varchar :name varchar :title text :body timestamp :created_at end before_save do set(:created_at => Time.now) if columns.include? :created_at end end Post.create_table if !Post.table_exists?
ほぼfeatures:ormsのまま。
- 「DB」はグローバルな定数でSequelオブジェクトが入る。
- デフォルト値がよくわからなかったのでbefore_saveで代用(たぶん間違ってるので注意)
- 最後にCREATE TABLE IF NOT EXISTSみたいな処理。
modelディレクトリ内にあるファイルは自動で全部読まれるみたい。最初からやり直したくなったらsqlite.dbを消せばいい。
View
Erubis使う。他にもいろいろ使える。Hamlは公式サイトのロゴが怖いというか気持ち悪いので使いたくない。
# vim view/index.rhtml hello <%== @title %>
最初index.html.erbとかindex.erbとかやって動かなくてハマった。
コントローラがfoo、アクションがbarなら、view/foo/bar.rhtmlかview/foo__bar.rhtmlになるみたい。
Controller
# vim controller/main.rb
class MainController < Ramaze::Controller
engine :Erubis
def index
@title="ramaze"
end
end
だいたいいつもどおり。features:templatesはあまり参考にしなかった。
うごかしてみる
# ruby start.rb
んでlocalhost:7000を見てみる。ちゃんと動くのを確認したら一旦Ctrl+C。
DBに値を入れたり出したりする
controller/main.rbに書く。
# vim controller/main.rb
class MainController < Ramaze::Controller
engine :Erubis
def index
@title="ramaze"
db=Post.new({
:title => "test title",
:body => "test\nbody",
:name => "ramaze test"
})
db.save
@posts=Post.reverse_order(:created_at).all
end
end
viewも変える。
# vim view/index.rhtml
<h1>hello <%== @title %> </h1>
<% @posts.each{|p| %>
<p>
<strong><%== p.title %></strong>
<em><%== p.name %></em>
<%= p.body.gsub(/\r\n|\r|\n/,"<br />\n") %>
</p>
<% } %>
リロードするたびに増えてくはず。
formを使う
viewにformを足す。
# vim view/index.rhtml <form action="" method="post"> <input type="text" name="title" /> <input type="text" name="name" /> <textarea name="body"></textarea> <input type="submit" /> </form> .. 以下同文
controllerも変える。
# vim controller/main.rb
class MainController < Ramaze::Controller
engine :Erubis
def index
@title="ramaze"
post=request.POST
if post[:body] && post[:body].length > 0 # てきとー
db=Post.new(post)
db.save
end
@posts=Post.reverse_order(:created_at).all
end
end
これでタイトル、名前、本文を投稿できるようになったはず。
Thinでサーバをデーモンにする
start.ruっていうRack用のファイルがあるはずなのでそのまま使う。WEBrickじゃなくてMongrelがいいとか、ポートが7000番じゃ嫌だ、とかならstart.rbのほうを適当に書き換えて使う。
# thin start -R start.ru -d
おわりに
コード自動生成とかがない。これをシンプルというか貧相というかで適正がわかるのではないか。