eRuby (CGI)で POST する時に値を渡す方法

eRuby

2016年も終わろうとしているこのときに CGI な eRuby を使っている人がどれだけいるのかというとあやしいですが、とりあえず知見として。

eRuby(erb)を CGI で

下記のサイトなどの方法で、任意のファイルに Ruby スクリプト を埋め込んで Web に展開できます(感謝)。

ERBによるWebアプリケーション開発(1/3):初心者のためのRubyプログラミング入門 - libro

http://combitaro.net/article/160

しかしながら、POSTデータを渡すことができません。

POST を渡すために(元データ)

POSTデータを渡すためには、バイパスしているスクリプトに手を加える必要があります。

元のスクリプトは以下のとおりです(解説は上記サイトを参照してください)。

#!/usr/bin/ruby
require 'erb'
require 'cgi'

puts 'Content-Type: text/html; charset=utf-8'
puts

ERB.new(IO.read(CGI.new.path_translated)).run

POST を渡すために(修正データ)

バイパスをかましているために POSTデータ が失われています。ですので、下記のように書き加えましょう。

#!/usr/bin/ruby

require 'erb'
require 'cgi'

puts 'Content-Type: text/html; charset=utf-8'
puts

cgi = CGI.new
params = cgi.params

ERB.new(IO.read(CGI.new.path_translated)).run

これで「params」にハッシュで返ってきます。<input type="text" name="address"> のような1つだけのデータを送る単純なフォームの場合ですと、params["address"][0] で取得できます*1

さらに改修

より使いやすく変更したい場合は以下のドキュメントを参考にしてみてください。

library cgi (Ruby 3.1 リファレンスマニュアル)

*1:もちろん GET も返ってきます

Powered by はてなブログ