演習課題「間違い探し」
右の環境には、Sinatraで「RPGの行動選択メニュー」を表示するプログラムが作成されています。このプログラムは、メニューで「あいさつ」という項目をクリックしても、メニューが表示されたままになります。間違いを修正して、「hello sinatra」と表示するように修正してください。
採点して、すべてのジャッジに正解すれば、演習課題クリアです!
※ 採点時は、サーバーを起動し、問題文に関するページにアクセスできる状態にしてください。
#07:テンプレートを別のファイルに分離しよう
ここでは、Webアプリケーションのデータの処理と表示の分離について学習します。例として、erbで記述したテンプレートを別ファイルにしてみましょう。
viewsディレクトリにテンプレートファイルを格納する
player_menu.rb
views
|
- indnex.erb
action.erb
テンプレートファイル名は、erbの引数でシンボルとして指定する。# メニュー, /, メニューを表示
get '/' do
@player = '勇者'
erb :index
end
# あるく, /walk, 荒野を歩いていた。
get '/walk' do
@player = '勇者'
@message = "#{@player}は、荒野を歩いていた。"
erb :action
end
# 見た目とロジックを分離する
require 'sinatra'
require 'sinatra/reloader'
require 'erb'
# メニュー
get '/' do
@player = '勇者'
erb :index
end
# あるく
get '/walk' do
@player = '勇者'
@message = "#{@player}は、荒野を歩いていた。"
erb :action
end
# たたかう
get '/attack' do
@player = '勇者'
@message = "#{@player}は、モンスターと戦った。"
erb :action
end
<!DOCTYPE html>
<html lang="ja">
<head>
<mata charset="utf-8">
<title>Sinatra - paiza</title>
<style>body {padding: 30px;}</style>
</head>
<body>
<h1><%= @player %>のメニュー</h1>
<p><a href="/walk">あるく</a></p>
<p><a href="/attack">たたかう</a></p>
</body>
</html>
<!DOCTYPE html>
<html lang="ja">
<head>
<mata charset="utf-8">
<title>Sinatra - paiza</title>
<style>body {padding: 30px;}</style>
</head>
<body>
<h1><%= @player %>のアクション</h1>
<p><%= @message %></p>
<p><a href="/">メニューに戻る</a></p>
</body>
</html>
- [Sinatra: README (Japanese)]
http://www.sinatrarb.com/intro-ja.html
- [SinatraでとりあえずWebページを立ち上げてみる - Qiita]
http://qiita.com/k-ta-yamada/items/9e35c5f8b31862267e01
- [Sinatraの初心者向け入門 〜簡単にWebサイトを作れるRubyのフレームワーク〜 - ゴトーのブログ]
http://www.gamehuntblog.com/entry/sinatra-first-step
- [Sinatra 入門 - Qiita]
http://qiita.com/kimioka0/items/751e460cbb59c70379c6
- [Sinatraであそぶ | キャスレーコンサルティング 技術ブログ]
http://www.casleyconsulting.co.jp/blog-engineer/ruby/sinatra%E3%81%A7%E3%81%82%E3%81%9D%E3%81%B6/
- [はじめてのSinatra - Qiita]
https://qiita.com/ms2sato/items/7c07b2079b48c49fad2a
- [Rubyist Magazine - Sinatra 再入門、 Padrino / Rack / その先の何か]
http://magazine.rubyist.net/?0036-SinatraReintroduction