私はデモ用にシンプルなSinatraアプリを開発しています。これを実装する方法があるかどうかは疑問です。Sinatra Webページの入力を適切に管理する方法
Rubyプログラムは、超簡単です(注:関連部分のみを以下に貼り付けられます):
get '/' do
redis = Redis.new
redis = Redis.new(:host => settings.redis, :port => 6379)
redis.incr("pageviews")
@pageviews = redis.get("pageviews")
@hostname = Socket.gethostname
erb :webapp
end #get/
post '/increase' do
redis = Redis.new
redis = Redis.new(:host => settings.redis, :port => 6379)
redis.incr("pageviews")
@pageviews = redis.get("pageviews")
@hostname = Socket.gethostname
redirect '/'
end #post /increase
そして、私のHTMLはさらに簡単です(注:関連部分のみを以下に貼り付けられます):
<em style="color: blue; font-style: italic"> Views count (<%= @pageviews %>):</em>
<form method="post" action="/increase">
<input class='btn btn-primary' type='submit'>
</form>
ホームページを読み込むと、カウンタが1増加します。[送信]ボタンをクリックすると、カウンタが2ずつ増加します(1つは送信するアクションが原因で、1つはホームページにリダイレクトされるためです)。それはいいです。それが私が望むものです。
しかし、Sinatraの仕組みのせいで、[送信]ボタンを押すと、基本的にページ全体がリロードされます。このような単純なページでは問題ありませんが、より複雑なアプリケーションの場合、ウェブページ全体をリロードするには操作が重すぎる可能性があります。確かにエレガントではありません。
私はSinatraをあまりにも伸ばそうとしているのですか(そして、私がAngularのようなものに切り替える必要がある場合)か、またはSinatraで使用できる方法があれば、メソッド+リダイレクトを呼び出すことなく/
に?
ありがとうございました。