【问题标题】:Sending a Post Request Back to Sinatra Routes将发布请求发送回 Sinatra 路由
【发布时间】:2014-06-16 03:16:17
【问题描述】:

我有一个基本的 Sinatra/AJAX 应用程序,可以让两个图像相互竞争。该游戏有两个用户,在页面加载时都会提示他们登录。该应用程序在设置时考虑了 MVC 框架。

我正在尝试实现一个存储比赛结果的数据库。我的数据库有三个表:games、players 和 player_games(因为一个游戏可以有多个玩家,一个玩家可以玩很多游戏)。

在控制器中,我有三个主要路线。

POST 路由,在登录后创建两个玩家:

post '/' do
  @game = Game.create(player_1: params[:player1], player_2: params[:player2])
  return (@game).to_json
end

GET '/game/:id' 路由,加载统计数据 erb(只显示获胜的玩家和玩游戏的总时间):

get '/game/:id' do
  @game = Game.find(params[:id])
  erb :stats
end

还有 POST '/stats' 路由,它保存游戏和统计数据并重定向回上面的 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`

【问题讨论】:

    标签: javascript ruby ajax sinatra


    【解决方案1】:

    因为$.post是异步的,它不会重定向页面。服务器代码正在执行,但实际上并不会执行erb :stats这一行。

    这有点乱,但在你的$.post 之后,你可以做window.location.href = "/game/" + whatever_the_specific_game_id_is; 会重定向你。

    另外,请注意您的 has_and_belongs_to_many 连接表。它可能应该按字母顺序命名。来自 ActiveRecord 文档:

    除非连接表被明确指定为一个选项,否则它是使用类名的词法顺序来猜测的。因此,Developer 和 Project 之间的联接将给出默认联接表名称“developers_projects”,因为“D”按字母顺序位于“P”之前。

    【讨论】:

      猜你喜欢
      • 2019-10-29
      • 2015-12-30
      • 2018-06-03
      • 2020-11-30
      • 2011-07-07
      • 2021-10-02
      • 1970-01-01
      • 2017-02-13
      • 1970-01-01
      相关资源
      最近更新 更多