とりあえず公式
この記事でまとめていること
公式見たらだいたい分かります。その中でも、よく使うものをまとめてみました。
- ルーティングに正規表現
- 名前付きパラメータから値を取得
- ブロックパラメータで名前付きパラメータにアクセス
- ビューに値を渡す
- ビューのデフォルトテンプレート
- 全ページ共通の処理
- ヘルパー
- GET/POSTで送信されたデータの受け取り
- セッションの利用
- セッションの値を使った条件式
- ビューファイルのフォルダ分け
ルーティングに正規表現
get %r{/hoge/([\w]+)} do
yo
end
名前付きパラメータから値を取得
get '/hello/:name' do
"Hello #{params[:name]}"
end
ブロックパラメータで名前付きパラメータにアクセス
get '/hello/:name' do |n|
#n が params[:name] を保持
"Hello #{n}"
end
ビューに値を渡す
get '/' do
@hoge = "hoge"
erb :index
end
テンプレート側は
<%= @hoge %>
で値を受け取って表示できる。
ビューのデフォルトテンプレート
テンプレートのレイアウトは
views/layout.erb
を用意すればそれがレンダリングされます。
それ以外のテンプレートを用意して利用したい場合は、第2引数にハッシュ形式のオプションを渡せばよいです。
get '/wiki' do
@title = "wiki"
erb :index, :layout => :piyo #piyo.erbがレンダリングされる
end
ビューのデフォルトテンプレートからビューを呼び出すこともできます。
<body>
<header>
<%= erb :header %>
</header>
<%= yield %>
<footer>
<%= erb :footer %>
</footer>
</body>
全ページ共通の処理
リクエスト前の処理
before do
@piyo = "hoge"
end
before '/hoge/*' do #ページの指定もできる
@piyo = "hoge"
end
リクエスト後の処理
after do
logger.info "loading data"
end
after '/hoge/*' do #ページの指定もできる
logger.info "loading data"
end
ヘルパー
トップレベルのhelpersメソッドを使用して共通関数を定義できます。
helpers do
def bar(name)
"#{name}bar"
end
end
GET/POSTで送信されたデータの受け取り
post '/test' do
params[:hoge] #GET/POSTの区別は特に必要ない
end
セッションの利用
enable :sessions
post '/' do
session[:hoge]
end
Sinatraではセキュリティのため、セッションデータはセッション秘密鍵で署名されます。
セッション秘密鍵はアプリケーション立ち上げごとにランダムで生成されますが、もし固定したい場合は
set :session_secret, 'your session secret'
でOK。
セッション値を使った条件式
未定義のセッションを条件式にかけると爆発するので、未定義ならnilを代入してあげましょう。
session[:hoge] ||= nil #未定義ならnilを代入する
if session[:hoge].nil? then
redirect to('/')
end
豆知識
知ってると便利なもの
ビューファイルのフォルダ分け
viewをhogeフォルダにまとめた場合です。
/view/hoge/index.erb を読み込む場合
get '/hoge' do
erb 'hoge/index'.to_sym
erb :'hoge/index' #値はシンボルで渡す必要がある
end