なんかばんざい

会社や家で感じたもんのとある備忘録!!

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

おわりに

コード自動生成とかがない。これをシンプルというか貧相というかで適正がわかるのではないか。

ほか

メール

フォクすけ

Mozilla Firefox ブラウザ無料ダウンロード