昨日、学生さんから授業課題について質問があって調べたのですが簡単には見つからなかったので書いておきます。
WEBrickとはなんぞや?という話は以下のような記事がありましたのでご参照ください。
以下のような簡単なプログラムがあったとします。チェックボックスを3つおいて、選択肢を表示しようとしています。このままだと、複数選択した場合、1番目の回答しか取得できません。
require 'webrick'
config = {
:Port => 8080,
:DocumentRoot => '.'
}
server = WEBrick::HTTPServer.new( config )
server.mount_proc "/" do |req, res|
res.body = <<~EOS
<!DOCTYPE html>
<html>
<body>
<form action="/do" method="post">
<input type="checkbox" name="a" value="1">1
<input type="checkbox" name="a" value="2">2
<input type="checkbox" name="a" value="3">3
<input type="submit">
</form>
</body>
</html>
EOS
end
server.mount_proc "/do" do |req, res|
res.body = <<~EOS
<!DOCTYPE html>
<html>
<body>
#{req.query['a']}
</body>
</html>
EOS
end
trap(:INT) do
server.shutdown
end
server.start
「あれ?」と。
JSPでは教えた記憶があるのですが、Rubyではやった記憶がない。。。授業で扱っておきながらその内容を取得する方法について知らなかったのです。。。
フォームに入力した値はWEBrick::HTTPUtils::FormDataで管理されるとのことです。そのドキュメントを見てみました。
上記に以下の記述があります。.listって書けば配列データが取り出せるんですね。。。なるほどぉ〜。
ということで、以下のように1行だけですが、書き換えればよかったよ〜ということでした。はい。
require 'webrick'
config = {
:Port => 8080,
:DocumentRoot => '.'
}
server = WEBrick::HTTPServer.new( config )
server.mount_proc "/" do |req, res|
res.body = <<~EOS
<!DOCTYPE html>
<html>
<body>
<form action="/do" method="post">
<input type="checkbox" name="a" value="1">1
<input type="checkbox" name="a" value="2">2
<input type="checkbox" name="a" value="3">3
<input type="submit">
</form>
</body>
</html>
EOS
end
server.mount_proc "/do" do |req, res|
res.body = <<~EOS
<!DOCTYPE html>
<html>
<body>
#{req.query['a'].list} #変更箇所(.listを付加しました)
</body>
</html>
EOS
end
trap(:INT) do
server.shutdown
end
server.start
おしまい。