0

我有 2 个控制器:游戏和播放器。

  1. 游戏创建我的游戏和第一个玩家,并重定向到玩家的“编辑”动作。
  2. 用户向玩家提交更新,玩家控制器重定向回游戏“显示”动作。

用户流程运行良好(播放器已更新,并向用户显示游戏展示页面),除了最终提交时浏览器中的 URL 仍显示“www.server.com/players/:id”。如果我在浏览器上点击刷新,它将转到玩家的表演动作(如 URL 所示),而不是刷新当前屏幕上的游戏/表演内容。

修复此行为的首选方法是什么?

游戏控制器:

def create
  @game = Game.new(params[:game])
  if @game.save
    redirect_to edit_player_path (@game.players.first)
  else
    render 'new'
  end
end

玩家控制器:

def update
  @game = current_game
  @player = @game.players.find(params[:id])
  if @player.update_attributes(params[:player])
    redirect_to @game
  else
    render 'edit'
  end
end

回答后续问题:

current_game 是检索游戏的辅助方法(与 Rails 教程http://ruby.railstutorial.org/chapters/sign-in-sign-out的设计相同)

def current_game
  @current_game ||= Game.find_by_remember_token(cookies[:remember_token])
end

路线.rb:

root to: 'static_pages#home'
get "static_pages/home"

resources :games
resources :players
resources :sessions, only: [:new, :create, :destroy]

更新:

我想我已经缩小了问题的范围。它与 jquery_mobile_rails 有关。

通过创建一个带有 2 个脚手架的新项目并在控制器中设置路由,我能够重现该行为。在没有 JQM 的情况下正确更新 URL。当我添加 jquery_mobile_rails gem 并执行 POST 时,URL 不再更新。

网上对此有进一步的讨论(见下面的链接),但到目前为止我还没有找到解决方案:

Rails jquery移动路由/渲染问题

http://forum.jquery.com/topic/restful-resources-rails-3-and-jquery-mobile

4

0 回答 0