インフラエンジニアbacchiのわかったことまとめ

bacchi.me

Sinatraで遊ぼう!リクエスト処理編

リクエストされたパラメーターを表示させる

今回はリクエストに入ってきたパラメータを表示させる処理を書いていきます。

例えば「/hello/bacchi」をリクエストすると「hello bacchi」と表示させるのをやってみたいと思います。

パラメータにしたいものは「:name」として、「:」の後に変数名を付けてシンボルにしてください。

パラメーターは paramsハッシュで取得できます。
文字列の中で変数を展開するには「#{name}」とすればOKですね。

なので、「"hello #{params[:name]}"」とすればOKです。

get '/hello/:name' do
  "hello #{params[:name]}"
end

これをやってみましょう。

例えば「/hello/ruby」とすると「hello ruby」と表示されますし、
「/hello/sinatra」とすると「hello sinatra」と表示されます。

このようにリクエストで渡ってきたパラメータを使いたいという場合がよくありますので、その扱い方を覚えておいてください。

他にもこれと同じことを違う表現ですることもできるので見ていきましょう。

「params[:name]」といちいち書くのが面倒なときは、ブロックの引数を使って

get '/hello/:name' do |n| 
  "hello #{n}"
end

と指定すると、「params[:name]」を簡単に「n」とすることができます。

このように「/hello/linux」とリクエストすると「hello linux」と表示されますね。

複数のパラメータを表示させる

また、パラメータは 2 つ以上付けることもできます。
それのやり方も見ていきましょう。

例えば

get '/hello/:f_name/:l_name' do |f, l| 
  "hello #{f} #{l}" 
end

とすると、それぞれに渡されたパラメータが表示されます。

例えば「/hello/taro/yamada」とすると、「hello taro yamada」と表示されます。

なお、パターンにマッチしないと下記のようなにエラーになってしまいます。

パラメータをオプショナルにしたい場合には、後ろに「?」を付ければ OK です。

この場合は「/」があってもなくてもという意味で「\'/hello/:f_name/?:l_name?\'」にしておきましょう。

get '/hello/:f_name/?:l_name?' do |f, l| 
  "hello #{f} #{l}" 
end

そうすると、このようにエラーなく、こちらだけ採用されているのが分かるかと思います。

このようにリクエストのパラメータを表示させるというのはよくやりますので、やり方を覚えておくようにしてください。

  • B!