[Ruby] Sinatra超入門
Sinatraで、入力した値を表示させるだけの超簡単なアプリをつくる方法を手順化して説明します。
1.環境作成
yum install openssl-devel httpd gem install sinatra gem install thin
2.ファイルの作成
ファイル名は適当に「test.rb」で作成します。
require 'sinatra' get '/top' do "Hello World" end
- まずsinatraをrequireします
- その後にルートにアクセスが来た場合の処理を書きます。
4.test.rbに書いていたview部分を他ファイルに切り出します。
require 'sinatra' get '/top' do erb :index end
- 形式とファイル名を指定
実際のviewファイルを作成しましょう。
- まずはviewsディレクトリを作成します
- その下にviewファイルを作成します(今回はindex.erb)
<html> <head> </head> <body> "Hello World" </body> </html>
5.パラメーターの利用
require 'sinatra' get '/top/?:name?' do |n| @name = n erb :index end
- パラメータはシンボルで指定します。
- ?をつけることで、任意入力になり、パラメータがなくてもよくなります。(つけないでパラメータなしだとエラーになります)
- パラメータはブロック引数で受け取れます
- 受け取った値をViewで使いたいときはインスタンス変数にいれます
<html> <head> </head> <body> Hello <%= @name %> </body> </html>
- 「http://localhost:4567/top/nouziru」にアクセスして、「Hello nouziru」が表示されることを確認します
6.before/after条件の設定
before do @title = "test application" end after '/top/*'do |n| logger.info("#{n} name was sent") end
- アクセスが来たときに、beforeで処理前・afterで処理後の設定を指定できます
- また、これもgetと同じように特定のURLへのアクセスの時のみに設定をすることが可能です
- パラメータをワイルドカード(今回は*)にしても、ブロック引数としてとることができます
- loggerメソッドでログに出力することができます
ログ出力
I, [2015-07-21T03:52:37.112219 #4101] INFO -- : nouziru name was sent
<html> <head> <title><%= @title %></title> </head> <body> Hello <%= @name %> </body> </html>
7.Viewのリファクタリング(layout.rb)
sinatraはviewsディレクトリにlayout.rbというファイルがあるとそれを最初に読み込みます。
なので、viewの共通部分はlayout.rbにまとめてしまって、各ファイルには固有部分だけ記載すると使いまわしがききます。
viwes/layout.rb
<html> <head> <title><%= @title %></title> </head> <body> <%= yield %> </body> </html>
- 各ファイルの固有部分を挿入する位置は、yieldで指定します。
views/index.erb
Hello <%= @name %>
8.postで値を送って表示します
views/index.erb
まずは送り側を作成します
Hello <%= @name %> <h2>Post comment</h2> <form method="post" action="/new"> <input type="text" name="newName"> <input type="submit" value="post!!"> </form>
index.rb
次に受け取り側の処理を書きます
post '/new' do redirect "/top/#{params[:newName]}" end
- postの場合は今までgetにしていた部分をpostにします
- パラメータはparams[:パラメータ名]で受け取ります