我有 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 不再更新。
网上对此有进一步的讨论(见下面的链接),但到目前为止我还没有找到解决方案:
http://forum.jquery.com/topic/restful-resources-rails-3-and-jquery-mobile