我有一個基本的Sinatra/AJAX應用程序,可以將兩個圖像相互對抗。遊戲中有兩個用戶,他們都被提示在頁面加載時登錄。該應用程序設置了一個MVC框架。發送郵件請求返回Sinatra路線
我想實現一個數據庫,將存儲比賽的結果。我的數據庫有三個表格:遊戲,玩家和玩家遊戲(因爲遊戲可以有多個玩家,玩家可以玩很多遊戲)。
在控制器中,我有三條主要路線。
的POST路線,創造登錄後雙方球員:
post '/' do
@game = Game.create(player_1: params[:player1], player_2: params[:player2])
return (@game).to_json
end
的GET「/遊戲/:身份證」的路線,它加載統計ERB(只是說誰贏得球員和總時間帶着玩遊戲):
get '/game/:id' do
@game = Game.find(params[:id])
erb :stats
end
和後「/統計」路線,從而節省了遊戲和統計,並重定向到上面的GET請求:
post '/stats' do
game = Game.find(params[:game_id])
game.winner = params[:winner]
game.play_time = params[:time]
game.save!
redirect '/game/' + params[:game_id]
end
在JavaScript文件中,當遊戲結束時,我使用jQuery的$.post
方法將統計信息發送到POST'/ stats'路線。這會保存統計數據,但不會將遊戲重定向到GET'/ game /:id'路線。它將完全擊中@game = Game.find(params[:id])
部分代碼,並且甚至會打印出「hello world」,如果我設置了這樣的帖子路線,但不會重定向GET'/ game /:id'路線:
get '/game/:id' do
@game = Game.find(params[:id])
erb :stats
puts "hello world"
end
`D, [2014-04-29T19:48:51.723270 #3242] DEBUG -- : (0.2ms) BEGIN
D, [2014-04-29T19:48:51.729138 #3242] DEBUG -- : (0.6ms) UPDATE "games" SET "winner" = 'tim', "play_time" = 3, "updated_at" = '2014-04-29 19:48:51.724453' WHERE "games"."id" = 10
D, [2014-04-29T19:48:51.732144 #3242] DEBUG -- : (2.6ms) COMMIT
D, [2014-04-29T19:48:52.208625 #3245] DEBUG -- : Game Load (1.4ms) SELECT "games".* FROM "games" WHERE "games"."id" = $1 LIMIT 1 [["id", "10"]]
hello world`