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 にアクセスする