ルーティング
複数のマッチングパターンに同じ処理を設定したい時
- 配列にパターンを渡して回す
['/article/:num', '/article/entry/:num'].each do |path| get path do # 処理 end end
- 手続きオブジェクトを渡す
article = lambda do # 処理 end get '/article/:num', &article get '/article/entry/:num', &article
POSTも実装したい時はpost 'hoge', &fuga
ビュー/テンプレート
一部の処理が同一で、渡すテンプレートが一緒の場合
(似たような画面を量産する時など)
get '/hoge' do # 処理 # /fugaと重複する処理 erb :piyo # views/piyo.erbを渡す end get '/fuga' do # 処理 # /hogeと重複する処理 erb :piyo # /hogeと同じくviews/piyo.erbを渡す end
こういう時には、
# どこかに定義 def piyopiyo # 重複する処理 erb :piyo end
get '/hoge' do # 処理 piyopiyo end get '/fuga' do # 処理 piyopiyo end
↑でちゃんとテンプレートも渡される。
後ビューに値を渡す時、ローカル変数をテンプレートに渡すこともできる。
get '/hoge/:value' do value = params['value'] erb :hoge, locals: { key: value } end
# hoge.erb <%= key %>
↑でvalueの値が表示される。
でも実際はインスタンス変数を定義してビューで使った方がいいらしい。
他の人がソースを読んだ時、ぱっと見でメソッドか変数かわからなくなるからとのこと。
<%= @hoge %> <%= @fuga %> <%= piyo %> <%= piyopiyo %> <%= key %>
たしかに。