我有2个控制器:游戏和玩家。
用户流程运行良好(播放器已更新且用户显示在游戏节目页面中),但最终提交时浏览器中的URL仍显示“www.server.com/players/:id”。如果我在浏览器上点击刷新,它将转到播放器的show动作(如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 Tutorial http://ruby.railstutorial.org/chapters/sign-in-sign-out相同的设计)
def current_game
@current_game ||= Game.find_by_remember_token(cookies[:remember_token])
end
routes.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 mobile Routing/Rendering Issue
http://forum.jquery.com/topic/restful-resources-rails-3-and-jquery-mobile