スポンサーリンク

2015年5月18日

Sinatraで入力フォームのデータを取得する。

タイトル:Sinatraで入力フォームのデータを取得する。

目的:htmlのinputタグ(テキストボックス)で入力されたデータを取得し表示する。

実施環境:
OS:Windows8.1
Ruby:v2.2.2
Sinatra:v1.4.6
Haml:v4.0.6

ディレクトリ構造:
作業ディレクトリ
|-sinatra_start.rb(ファイル)
|
|-views(ディレクトリ)
    |-index.haml(ファイル)
    |-request_print.haml(ファイル)

目次:

  1. 入力データを取得(sinatra_start.rb)
  2. 入力フォームを作成(index.haml)
  3. 入力データを表示(request_print.haml)
  4. 説明&実行

以前、以下の記事を閲覧して頂いたことがある方は、
ソースコードを追記/修正する形で実施すると楽です。

1.入力データを取得(sinatra_start.rb)

1.1
画面側で入力されたデータを取得する部分を記述する。

ソースコードは以下の通り作成した。
# encoding: utf-8
# File Name: sinatra_test.rb
# Create Day is 2015/05/08
# Last Update Day is 2015/05/14
# Gem List
gem 'tilt', '1.4.1'
# Require List
require 'sinatra'
# sinatra reloader is classic type
require 'sinatra/reloader' if development?
require 'haml'
require 'tilt'
require 'csv'
# 外部エンコーディングを変更
Encoding.default_external = "UTF-8"
get '/' do
@title = "Hello world!!"
@text = "Hello Haml!!"
@bbs_data = CSV.read("resources/bbs_data.csv")
haml :index
end
put '/request_print' do
@request_method = request.request_method
@request_url = request.url
@request_path = request.path
@name = params[:name]#request[:name]
@title = params[:title]#request[:title]
@message = params[:message]#request[:message]
haml :request_print
end

2.入力フォームを作成(index.haml)

2.1
画面に入力するための入力フォームを作成する。

ソースコードは以下の通り作成した。
!!!
-# %TagName(html)で記述
%html{:lang => "ja"}
%head
-# 「%TagName= @EmmbeddingName」で出力
%title= @title
%body
-# 「%TagName #{@EmmbeddingName}で出力」
%h1 #{@title}
%p= @text
- @bbs_data.each do |row|
%p= row
- row.each do |element|
%p= element
%form{:method => "POST", :action => '/request_print'}
%input{:type => "hidden", :name => "_method", :value => "PUT"}
%input{:type => "text", :name => "name"}
%input{:type => "text", :name => "title"}
%input{:type => "text", :name => "message"}
%input{:type => "submit"}
view raw index.haml hosted with ❤ by GitHub

3.入力データを表示(request_print.haml)

3.1
入力されたデータを画面で確認する部分を作成する。


ソースコードは以下の通り作成した。
!!!
%html{:lang => "ja"}
%head
%title Request Print
%body
%p リクエストのHTTPメソッドと実行パス
%p
= "method = #{@request_method}"
= "url = #{@request_url}"
= "path = #{@request_path}"
%p 入力フォームのテキストボックスから入力されたデータ
%p
= "TextBox(name) = #{@name}"
= "TextBox(title) = #{@title}"
= "TextBox(message) = #{@message}"


4.説明&実行

4.1
Ruby側についての説明

データの取得の仕方は、
「params[:inputタグのnameの値]」で取得できる。

また、直接(?)Webリクエストの内容からも取得できた。
「request[:inputタグのnameの値]」でも取得できた。

現状、使い分けがどうなっているのか分からない。
しかし、Sinatraの本家サイトではルーティングの説明の後に
paramsでデータを取得をしている部分があるので、
おそらくparamsを使っていれば問題はないと思う。

4.2
Haml側についての説明

index.hamlについての説明。
Hamlでは、inputタグを以下のように記述する。
「%input{:type => "text", :name => "name"}」

typeにinputの種類(今回はテキストボックス)を、
nameにはparamsで取得するための名前を設定している。

inputタグの詳しい設営はhtmlのドキュメントか説明サイトを参照にして下さい。

request_print.hamlの説明は表示のみなのでなし。

4.3
以下のコマンドで実行する。
コマンド: ruby sinatra_start.rb

画面下部に入力フォーム3つとボタンが出ていることを確認し、
適当な文字を入力フォームに入力する。
送信ボタンを押下する。

ページ遷移し、入力した値が表示されていれば問題ない。

以上!!


参考にさせて頂いたサイト
Sinatra本家(日本語訳)

管理人の独り言...
これで、パーツは概ね問題ないかな...?
まだ、DBやらActiveRecordだとかあるけど、
修正でプログラムすればいいし大丈夫だろう。

というわけで、ようやっと掲示板の作成に取り掛かれます。
内容的には、Webの基本中の基本的な内容なので、
あまり過度な期待はしないで下さい。

人気の投稿