Ruby 2.4.0 リファレンスマニュアル以前の単純な表示するだけのテンプレートは『Ruby 2.4 で GET/POST メソッドを想定した CGI 用の簡易テンプレートを作成してみました』です テンプレートの要点 1) メイン / 共有メソッド / 画面 のソース分割 Ruby は単純にグローバル変数が各ソースで共有できたので、それらでコントロールしています。 2) fields() と forms() の画面埋め込み 上記2メソッドで FORM 内の入力値のコントロールをしています ※ $fld_names を定義し、日本語でフィールドを参照するようにしてソースを読みやすくしています。 メイン
# **************************************
# https://docs.ruby-lang.org/ja/latest/method/Array/i/unshift.html
# ライブラリ参照にカレントを追加
# **************************************
$:.unshift File.dirname(__FILE__)
# **************************************
# http://www.tmtm.org/ruby/mysql/
# gem install ruby-mysql
# **************************************
require 'mysql'
# **************************************
# カレントのファイルを読み込み
# **************************************
require 'my_func'
# **************************************
# 使用するライブラリ
# **************************************
require 'cgi'
require 'pp'
# **************************************
# グローバル変数
# **************************************
$error_flg = 0
$error_msg = ""
$check_message = ""
$fld_names = {}
$base_path = __FILE__
cgi_init
# **************************************
# 接続
# **************************************
begin
connection = Mysql.connect("127.0.0.1", "root", "", "lightbox")
rescue => ex
print "<pre>"
print format("%d エラーが発生しました\n%s\n",ex.errno,ex.error);
puts "--------------"
p ex.instance_variables
p ex.to_s
p ex.message
print "</pre>"
p ex.error
# 接続エラーの場合は終了
exit!
end
# **************************************
# フィールド参照の定義
# **************************************
$fld_names = {
"確認" => "send1",
"送信" => "send2",
"社員コード" => "key",
"氏名" => "field1",
"フリガナ" => "field2"
}
# **************************************
# 第一パス( MySQL 参照 )
# **************************************
if forms("確認") == "確認" then
$check_message << "確認が押された"
sql = <<-SQL
select * from 社員マスタ
where 社員コード = '#{forms("社員コード")}'
SQL
$check_message << " : " << sql
begin
result = connection.query(sql)
row = result.fetch_row()
forms("氏名", row[1])
forms("フリガナ", row[2])
# エラー処理
rescue => ex
end
end
# **************************************
# 第ニパス( MySQL 更新 )
# **************************************
if forms("送信") == "送信" then
$check_message << "送信が押された"
sql = "update 社員マスタ set 氏名 = '#{forms("氏名")}', フリガナ = '#{forms("フリガナ")}' where 社員コード = '#{forms("社員コード")}' "
$check_message << " : " << sql
begin
result = connection.query(sql)
# エラー処理
rescue => ex
end
end
# **************************************
# 画面定義
# **************************************
require 'my_view'
# **************************************
# cgi データの確認
# **************************************
print "<div style='margin-top:30px;'>-------------------------------------</div>"
pp $params
# **************************************
# select の結果を CSV 形式の文字列で取得する
# **************************************
print "<pre>"
print "<div style='margin-top:30px;'>-------------------------------------</div>"
print get_csv(connection,"select * from 社員マスタ")
print "</pre>"
# **************************************
# 接続解除
# **************************************
connection.close
# **************************************
# get_csv のエラー
# **************************************
if $error_flg != 0 then
print "<div style='margin-top:30px;'>-------------------------------------</div>"
print format("%d エラーが発生しました\n%s",$error_flg,$error_msg);
end
インデント ヒアドキュメント( <<-識別子 )
※ ドキュメントの参照
if forms("確認") == "確認" then
$check_message << "確認が押された"
sql = <<-SQL
select * from 社員マスタ
where 社員コード = '#{forms("社員コード")}'
SQL
end
開始ラベルを <<-識別子 のように - を付けて書くことで終端行をインデントすることができます。さらに、<<~識別子 を使用すると、最も小さなインデントに合わせて行頭のスペースを削除します。
共有メソッド( my_func.rb )
=begin
※ 前方参照の関数を require
select の結果を CSV 形式の文字列で取得する
=end
# **************************************
# select データの確認
# **************************************
def get_csv(connection,sql)
# $ は グローバルスコープの変数
$error_flg = 0
$error_msg = ""
str_row = ""
begin
result = connection.query(sql)
result.each do |fld|
len = fld.length
for data in fld do
# 文字列追加
str_row << "#{data},"
end
# 最後のカンマを取り除く
str_row.chop!
# 次の行の為改行( 文字列追加 )
str_row << "\n"
end
# エラー処理
rescue => ex
$error_msg = ex.error + "\n"
$error_flg = ex.errno
end
return str_row
end
# **************************************
# CGI 処理
# **************************************
def cgi_init
$cgi = CGI.new
puts "Content-Type: text/html; charset=utf-8"
puts "Expires: Thu, 19 Nov 1981 08:52:00 GMT"
puts "Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0"
puts "Pragma: no-cache"
puts
#pp $:
$params = $cgi.params
end
# **************************************
# FORM 用変数の参照と設定
# **************************************
def forms( target, setter=nil )
result = ""
key = $fld_names[target]
if not setter.nil? then
$params[key][0] = setter
return
end
if not $params[key].empty? then
result = $params[key][0]
end
return result
end
# **************************************
# フィールド用文字列の参照
# **************************************
def fields( target )
return $fld_names[target]
end
画面( my_view.rb )
# **************************************
# 画面定義
# **************************************
out_client = <<HTML
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<h4>#{$check_message}</h4>
<a href="#{File.basename($base_path)}">GET 再読み込み</a>
<form method="post">
<p>
社員コード : <input type="text" name="#{fields("社員コード")}" value="#{forms("社員コード")}">
<input type="submit" name="#{fields("確認")}" value="確認">
</p>
<p>
氏名 : <input type="text" name="#{fields("氏名")}" value="#{forms("氏名")}">
</p>
<p>
フリガナ : <input type="text" name="#{fields("フリガナ")}" value="#{forms("フリガナ")}">
</p>
<p>
送信 : <input type="submit" name="#{fields("送信")}" value="送信">
</p>
</form>
</body>
</html>
HTML
print out_client
AN HTTP Server の設定テストにはまだまだ使える(重宝する) AN HTTP Server の正しい使用方法
|
|
【Ruby 2018の最新記事】
- Ruby(mechanize) で Seesaa のエクスポート
- さくらインターネットに Ruby をインストールして mechanize ( 先に nokogiri のインストールが必要でした )
- Ruby + MySQL + IFRAME + Bootstrap : 問い合せ WEB アプリテンプレート
- Ruby のエンコーディング( スクリプト・デフォルト・STDIN・STDOUT )
- Ruby 2.4 で GET/POST メソッドを想定した CGI 用の簡易テンプレートを作成してみました
- Windows10 : Ruby で日本語メール送信
- Eclipse + Ruby : win32ole(COM使用の為) + MySQL Connector/ODBC でループ処理をしながら更新
- Pleiades Eclipse 4.7 Oxygen で Ruby を使って MySQL にアクセスする


以前の単純な表示するだけのテンプレートは『




