ゲームとプレーヤーの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
フォローアップの質問への回答:
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 つのスキャフォールドを使用して新しいプロジェクトを作成し、コントローラーでルーティングを設定することで、動作を再現できました。URL は JQM なしで適切に更新されます。jquery_mobile_rails gem を追加して POST を実行すると、URL が更新されなくなりました。
これについては Web 上でさらに議論されていますが (以下のリンクを参照)、これまでのところ解決策を見つけることができませんでした。
Rails jquery モバイル ルーティング/レンダリングの問題
http://forum.jquery.com/topic/restful-resources-rails-3-and-jquery-mobile