ドットインストールのsinatra入門を終えたので、学習メモです。
主に環境整備から、controllerの基本的な記載方法とcontrollerのviewの呼び出し方法
0.準備
ローカル環境の整備がいる。今回のsinatra入門での学習環境の環境整備方法は
win:ローカル開発環境の構築 [Windows編]
mac:ローカル開発環境の構築 [macOS編]
にある。
自分用メモ。
ローカル開発環境の構築 [macOS編] https://t.co/IctsLnWHUa
— R_Tachi (@VCaltab) 2018年12月20日
を実施し、macのローカルをいじったのでメモ
【メモ】macにVirtual boxとVagrantインスコしたぜ。macのターミナルって実は上部の環境設定で文字フォント変えれるんだぜ。/Users/ユーザ名/MyVagrant/MyCentOSにCentOS6.8用のVagrantfileからCentOS6.8入れたぜ。IPは192.168.33.ten な。vagrant upで立ち上げてvagrant statusで状態確認な
— R_Tachi (@VCaltab) 2018年12月21日
またファイル転送(SFTP)としてGUIツールのCyberduckを使用。
頻繁に使うショートカットとして
「command」 + 「F」 ファイル作成
「command」 + 「shift」 + 「n」 フォルダ作成
また、gemでsinatra,sinatra-contrib,activerecord,sqlite3を入れる。
sinatra-contribを入れることで本来変更のたびにサーバリロードする必要があるが、それがなくなる。
1.起動
コマンド$ ip a
でインターフェース(ローカル)のIPを調べることができる。
ルートディレクトリにapp.rbを作成しそこから、app.rb内に
get '/' do "Hoge" end
とすれば/にルーティングできる。/にアクセスすることでHogeが出力される想定となる。
またコマンドから$ ruby app.rb -o [IPアドレス]
を打つことでルートにapp.rbが読み込まれる。
あとばブラウザからhttp://[IPアドレス]:4567/
にアクセス
終わるときはctrl + c
ちなみにルーティングが同じの場合、上部が優先される。
コントローラ変更のたびにサーバ再起動する必要をなくす方法
本来変更のたびにサーバ再起動する必要がある。ただしgemでsinatra-contribを入れてあげて、コントローラ(ここではapp.rb)に
require 'sinatra/reloader'
を入れてあげると再起動の必要がなくなる。
2.controllerの変数の受け取り方
get '/hello/:name' "hello #{params[:name]}" end
みたくするとurlを/hello/tanaka
みたくすることでtanaka
をparamsで受け取ることができるのでhello tanaka
と表示することができる。
また
get '/hello/:fname/?:lname?' do |f,l| "hello #{f} #{l}" end
にするとすることで複数paramを受け取ることもできる。その際?(オプショナル)を設定することで必須ではなくなる。
ワイルドカード使用
get '/hello/*/*' do "hello #{params[:splat][0]} #{params[:splat][1]}" end
みたく*で任意の文字列を設定もできる。urlを/hello/hoge/piyo
などすることでparams[:splat][]で取得できる 。
次に、正規表現も使用できる。
get %r{/users/([0-9]*)} do "user id = #{params[:captures][0]}" end
urlを/users/123
などとし、params[:capture][]とすることで数値が取得できる。
3.controllerからerb読み込み
フォルダー/viewにindex.erbを作成してそれを読み込みたい場合
get '/' do erb :index end
erb:index
で取得
複数erbの共通部分をまとめる
複数viewを作成した際に、共通部分をまとめたい場合
/view/layout.erb作成し、そこに書くことでまとめれることができる。 例:
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title> <%= @title %> </title> <link rel="stylesheet" href="css/styles.css"> </head> <body> <div class="container"> <%= yield %> </div> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <script src="js/main.js"></script> </body> </html>
<%= @title %>
でコントローラ部で@titleを作った場合に変数代入
<%= yield %>
で各viewを読み込める。