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 つのスキャフォールドを使用して新しいプロジェクトを作成し、コントローラーでルーティングを設定することで、動作を再現できました。URL は JQM なしで適切に更新されます。jquery_mobile_rails gem を追加して POST を実行すると、URL が更新されなくなりました。

これについては Web 上でさらに議論されていますが (以下のリンクを参照)、これまでのところ解決策を見つけることができませんでした。

Rails jquery モバイル ルーティング/レンダリングの問題

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

4

0 に答える 0