rubyで記述されたWebアプリケーションフレームワーク かならずしもMVCで記述する必要がなく非常に軽快に Webアプリケーションを作成することが出来ます。
sinatra のコード例
# -*- coding: utf-8 -*-
require 'sinatra'
get '/example' do
@title = 'example'
@view = Model.action()
erb :example
end
以下のようにURIのルーティングを記述することで 処理を記載していくことが出来ます。
get '/hello' do
"ハローワールド"
end
sinatra では、テンプレートを使ってViewを分離することも可能
テンプレートは共通のレイアウト定義(defaultでは、layout.erb)と 個別のレイアウト定義を分けて記述することが出来ます。
get '/template' do
@title = "テンプレートテスト"
@var = "ここが変更されます。"
erb :template
end
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title><%= @title %></title>
</head>
<body>
<%= yield %>
</body>
</html>
<h1> 下に処理内で指定した文字列が出力される </h1>
<p> <%= @var %> </p>
テンプレートには処理を埋め込めるので、以下の用に実処理と描画用の 処理を分けることが出来ます。
(要は、テンプレートにViewの処理を埋め込めることが出来る)
get '/list' do
@title = "リスト表示のテスト"
@list = ['AAA', 'BBB', 'CCC']
erb :list_test
end
<h3> 以下の用に表示側の都合で処理を選べる </h3>
点付きリストにするか
<ul>
<% @list.each do |item| %>
<li> <%= item %> </li>
<% end %>
</ul>
番号付きリストにするか
<ol>
<% @list.each do |item| %>
<li> <%= item %> </li>
<% end %>
</ol>
View側で選ぶので、処理とデザインを分けれる。
テンプレートには上記のerb形式の他に色々なフォーマットが利用できます。 以下は対応しているテンプレートのフォーマットです。
他にもあります。
ちなみにこのページは Markdown で記述したものを sinatra で 呼び出しています。
sinatra は、ルーティングの指定に柔軟性があったり、 他にもいろいろ機能はあります。
See: [日本語のReadMe] http://sinatrarb.com/intro-ja.html
Ruby on Rails で利用されているデータベースアプローチの仕組みです。
ActiveRecord の強みはDBへのアクセスを直感的なインスタンス アクセスで行なえるところです。
たとえば、以下のようなカラム構成のpartsというテーブルを 利用する場合
| カラム名 | 概要 |
|---|---|
| name | 名前 |
| price | 値段 |
以下のようにクラス宣言すればそのクラスやインスタンスに アクセスすることでDBアクセスを行えるようになります。
class Part < ActiveRecord::Base
end
例えば、新規にレコードを追加する場合は以下のように新たに インスタンスを生成する体で使うことが出来ます。
a = Part.new
a.name = "Sample part"
a.price = 123.45
a.save
上記の手順でSQL文の INSERT文と同じことになります。
DBからの探索をおこなうのであれば以下のようにクラスメソッドを 呼び出す体で行なうことが出来るのでDBを意識する必要がないです。
下記のように記述すれば parts テーブルから name カラムの値が Apple であるレコードの最初の1件が取得できます。
b = Part.find_by(name: "Apple")
下記のように記述すれば parts テーブルから name カラムの値が Apple であるレコードの全てが配列で取得できます。
b = Part.where(name: "Apple")
また、上記で取得したレコードの内容は以下のようにカラム名を メンバ名に指定することでアクセス出来ます。
b.each do |i|
print "name=#{i.name}, price=#{i.price}"
end
更新をするのも以下のようにインスタンスへの変更を行うことで 実現しています。
b.each do |i|
i.price *= 1.08 # 税込み価格に変更
i.save # 更新を適用
end
これらを使って現在作っているWebアプリ