我已經嘗試閱讀大量有關該主題的文章和帖子,但我仍然困惑不解,無法弄清楚我需要做什麼。有人可以解釋我需要做什麼嗎?Rails 3使用AJAX刷新頁面
我有一個Rails服務器(3.2.11),模型Game
代表Ra遊戲的當前狀態。我的games_controller
有方法show
顯示遊戲和doturn
處理某人的行爲。遊戲視圖顯示遊戲的當前狀態,幷包含每個可能移動的鏈接,這些鏈接會提交回doturn
操作。我的目標是讓視圖在設定的時間段後自動刷新,或者通過AJAX單擊其中一個鏈接。但儘可能地嘗試,我無法讓任何一個人工作。
我的視圖目前在/ views/games文件夾中設置如下。
_game.html.erb
實際呈現遊戲show.html.erb
只是增加了一個標題,然後使該部分,_game。show.js.erb
應該刷新頁面。我真的不知道這是如何工作
我也啓用了Jquery的與//= require
等行(他們是在默認情況下已經有了)
編輯:我有阿賈克斯工作的聯繫,但我仍然不知道如何在一段時間後自動刷新。有任何想法嗎?
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 />