2011-06-17 106 views
0

總之,我不明白帶有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> 
+0

什麼控制器打交道時/動作你叫與狗? coudl你請張貼一些代碼? – 2011-06-17 01:19:45

+0

我更新了它,是你想要的代碼嗎?我是新手,所以我對代碼的名字不太熟悉。 – Dol 2011-06-17 01:56:03

+0

好的,show是你要求的狗控制器的動作。其實這很奇怪。你是如何得到這些代碼的?我的意思是,show動作通常從DB中提取一個對象並將其傳遞給視圖。你實際上正在創建一個新的對象狗。你可以發佈cats_controller,dog_controller,js.erb文件和cats/index來檢查嗎? – 2011-06-17 01:58:59

回答

0

好的,我得到它的工作。在遊戲控制器中顯示的下缺少的是format.js。就像這樣:

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 
      format.js 
    end 
    end 

我想奇怪的是,遊戲並不需要這個執行阿賈克斯...

乾杯球員的幫助