私はすでにこのテーマに関する記事や投稿を数多く読んでみましたが、まだ当惑しており、何をする必要があるのか わかりません. 誰かが私が何をする必要があるかを正確に説明できますか?
Game
Ra ゲームの現在の状態を表すモデルを備えた Rails サーバー (3.2.11) があります。Myには、ゲームを表示するためgames_controller
のメソッドと、誰かのアクションを処理するためのメソッドがあります。ゲーム ビューには、ゲームの現在の状態が表示され、可能な動きごとのリンクが含まれており、アクションに送信されます。私の目標は、AJAX を介して、設定された期間の後、またはリンクの 1 つがクリックされるたびにビューを自動的に更新することです。しかし、私ができる限り試してみてください。どちらも機能させることができません。show
doturn
doturn
私のビューは現在、/views/games フォルダーで次のように設定されています。
_game.html.erb
実際にゲームをレンダリングしますshow.html.erb
ヘッダーを追加して、部分的な _game をレンダリングするだけです。show.js.erb
ページを更新することになっています。これがどのように機能するのかよくわかりません
また、etc 行で Jquery を有効にしました//= require
(それらはデフォルトで既に存在していました) 。
編集: リンクで AJAX が機能するようになりましたが、一定時間後に自動更新する方法がわかりません。何か案は?
show.html.erb:
<h1>Game <%= @game._id %></h1>
<div id="test"><%= render @game %></div>
show.js.erb:
$('#test').html('<%= escape_javascript (render @game) %>')
ゲームコントローラ
# GET /games/1
# GET /games/1.json
def show
@game = Game.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.json { render json: @game }
format.js
end
end
# POST /games
def doturn
error = Proc.new do |message|
flash[:alert] = message
return render :inline => "<%= flash[:alert] %>"
#return redirect_to :back #must return from method immediately
end
@game = Game.where(id: params[:id]).first
if @game.nil?
error.call "Game not found"
end
#all the game update logic here
@game.save
redirect_to :action => "show", :id => @game._id
end
これが私の部分的なビューの簡略化されたバージョンです。レンダリングに関する多くの作業を省略しましたが、それでも重要な動作はすべて含まれています。最初にこのビューを機能させるように努めるべきだと考えています。それから、後でコードの残りの部分を追加することができます。
<% game.game_players.each_with_index do |player, i| %>
<table>
<tr><td>Player <%= i+1 %></td></tr>
<tr><td>Suns: </td><td><%= player.suns %></td></tr>
<tr><td>Pharaohs: </td><td><%= player.pharaohs %></td></tr>
</table><p>
<%
make_linkt = lambda do |text, kwargs|
concat link_to text, {:remote => true, :method => "post", :action => "doturn", :id => game, :player => i}.merge(kwargs) # ** requires ruby 2
concat raw "<br/>"
end
if i == game.turn
if game.god_status == 0
make_linkt.call("Invoke Ra", :type=>"invoke")
if game.auction_track.size < 8
make_linkt.call("Draw tile", :type=>"draw")
end
else
make_linkt.call("Done", :type=>"god", :vals=>[], :endturn=>1)
end
end
%>
<% end %>
<br />