總之,我不明白帶有rails的ajax。我剛纔做了這個tutorial,我可以讓它工作。沒問題。當我有多個模型時,問題似乎就會出現。例如,如果我有一個模型「貓」,我使用教程來實現一些Ajax,很好地工作 - 每次我添加一個新的貓到列表中,它會出現在頂部而無需重新加載頁面。然後我添加一個「狗」模型,然後在cats索引中生成_dog.html.erb文件,並使用@ dogs.each來調用它。等Rails 3和Ajax混淆
現在我需要實現對狗的AJAX,但我把AJAX文件到create.js.erb在狗文件夾或貓create.js.html文件夾?我已經嘗試過兩次,但都沒有成功。在這個例子中,第一個模型將繼續工作,但其他模型不會。我知道它的一半工作,因爲當我按下回車鍵時頁面不會重新加載,但是也沒有生成任何內容。我檢查過身份證,都是正確的。
還有什麼我應該尋找?我的邏輯說,如果我在貓的索引中,並且從_dog.html.erb中渲染一些東西,我應該把所有的create ajax都放到cat create.js.html文件夾中。
幫助超過讚賞。
另外,就像第二個小問題一樣,我讀了另外一個tutorial,它建議我刪除public/javascripts文件夾中除「application.js」之外的所有內容,在我的情況下它是空白的。我沒有,因爲阿賈克斯正在工作,而不是其他模型。我應該接受教程建議嗎?
再次感謝。
更新
這是來自cats控制器中「show」的代碼。
@dog = Dog.new
respond_to do |format|
format.html
end
更新2
好了, 「貓」 是真正的 「遊戲」 和 「狗」 是真正的 「功能」。我用了貓和狗的例子,因爲我理論上認爲它會更容易,如果它讓它更容易混淆,那麼對不起:)。
代碼 - 阿賈克斯創建在遊戲指數正在遊戲,但創造的遊戲功能,顯示Ajax不是。遊戲節目是我想用ajax創建新功能的地方。功能已創建,但只能在頁面重新加載後纔可見。
class GamesController < ApplicationController
def index
@games = Game.paginate(:page => params[:page], :per_page => 10)
@game = Game.new
respond_to do |format|
format.html
end
end
def show
@user = User.find(params[:id])
@gameid = Game.find(params[:id])
@features = Feature.paginate(:page => params[:page], :per_page => 8, :conditions => {:game_id => @gameid})
@feature = Feature.new
respond_to do |format|
format.html
end
end
def create
@game = Game.new(params[:game])
respond_to do |format|
if @game.save
format.html { redirect_to(games_url,
:notice => 'game was successfully created.') }
format.js
else
format.html { redirect_to(games_url) }
end
end
end
def destroy
@game = Game.find(params[:id])
@game.destroy
respond_to do |format|
format.html { redirect_to(games_url) }
format.js
end
end
end
class FeaturesController < ApplicationController
def index
@features = Feature.all
@feature = Feature.new
respond_to do |format|
format.html
end
end
def show
end
def create
@feature = Feature.new(params[:feature])
respond_to do |format|
if @feature.save
format.html { redirect_to(features_url,
:notice => 'feature was successfully created.') }
format.js
else
format.html { redirect_to(features_url) }
end
end
end
def destroy
@feature = Feature.find(params[:id])
@feature.destroy
respond_to do |format|
format.html { redirect_to(features_url) }
format.js
end
end
end
(features/create.js.erb)
$('#features').prepend('<%= escape_javascript(render(@feature)) %>');
$('#features > li:first').effect('highlight', {}, 3000);
$('#features_form > form')[0].reset();
(games/create.js.erb)
$('#games').prepend('<%= escape_javascript(render(@game)) %>');
$('#games > li:first').effect('highlight', {}, 3000);
$('#game_form > form')[0].reset();
(games/index)
<h1>Games</h1>
<table>
<tr>
<td class="main">
<ul id="games">
<% @games.each do |game| %>
<%= render 'game', :game => game %>
<% end %>
</ul>
<% if signed_in? %>
<div id="game_form">
<%= render 'form' %>
</div>
<% else %>
<% end %>
</td>
<td class="sidebar">
</td>
</tr>
</table>
(games/show)
<h1>Features</h1>
<table>
<tr>
<td class="main">
<h2>Features</h2>
<div id="features_form">
<%= render 'features/form' %>
</div>
<ul id="features" style="margin:0;padding:0;">
<% @features.each do |feature| %>
<%= render 'features/feature', :feature => feature %>
<% end %>
<%= will_paginate @features, :class => 'pagination' %>
</ul>
</td>
<td class="sidebar">
</td>
</tr>
</table>
什麼控制器打交道時/動作你叫與狗? coudl你請張貼一些代碼? – 2011-06-17 01:19:45
我更新了它,是你想要的代碼嗎?我是新手,所以我對代碼的名字不太熟悉。 – Dol 2011-06-17 01:56:03
好的,show是你要求的狗控制器的動作。其實這很奇怪。你是如何得到這些代碼的?我的意思是,show動作通常從DB中提取一個對象並將其傳遞給視圖。你實際上正在創建一個新的對象狗。你可以發佈cats_controller,dog_controller,js.erb文件和cats/index來檢查嗎? – 2011-06-17 01:58:59