2011-12-26 45 views
2

我正在努力與我的第一個基於AJAX的應用程序,並需要幫助。我不斷收到此錯誤消息AJAX請求返回缺失模板

Template is missing 

Missing template my_apps/refresh, application/refresh with {:locale=>[:en, :en], :formats=>[:html], :handlers=>[:erb, :builder, :coffee]}. Searched in: * "/Users/csco/MyApps/app/views" 

我有一個Ruby on Rails窗體,有多個向下滾動菜單。我希望每次用戶更改其選擇時觸發AJAX請求,以便表單中的某些文本字段可以實時更新,而無需按下按鈕或重新加載整個頁面。

這些是我的代碼的相關部分:局部形式應用/視圖/ my_apps/_form.html.erb的

摘錄由新和編輯方法中使用

<%= form_for(@my_app, :html => {:name => "MyAppInfo"}) do |f| %> 
    <%= f.label :"Program Administrator" %> 
    <select class="prog_man_class" id=Program_Manager onChange="this.form.get_results_button_name.click()"> 
    <option value="1">Admin1</option> 
    <option value="2">Admin2</option> 
    <option value="3">Admin3</option> 
    </select> 

// more select menus here 

// some Ruby code here that ends by assigning a value to the field I want to be 
// updated in real time, I called it Total Power ; Total Power value depends on 
// the user's selection of Admin1, Admin2, or Admin3, as well as other selected options 

    <% @my_app.TotalPower=total_power %> 

    <%= f.label :"Total Power" %> 
    <%= f.text_field :TotalPower, :size => 6, :style => "text-align:right" %> 

    <div class="actions"> 
    <%= f.submit "Get Results", :name => "get_results_button_name", :remote => "true" %> 
    </div> 

<% end %> 

摘錄應用程序/控制器/my_app.rb

class MyAppController < ApplicationController 

// other methods like index, show, new, edit, create, and destroy are here --> 

    # PUT /my_apps/1 
    # PUT /my_apps/1.json 
    def update 
    @my_app = MyApp.find(params[:id]) 

    respond_to do |format| 
     if @my_app.update_attributes(params[:my_app]) 
     format.html { render :action => "refresh", :notice => 'Update SUCCESSFUL!' } 
     format.js 
     else 
     format.html { render :action => "edit" } 
     format.json { render :json => @my_app.errors, :status => :unprocessable_entity } 
     end 
    end 
    end 
end 

應用程序/視圖/ my_apps/refresh.js.erb(我也試圖將其重命名,沒有運氣或者refresh.js.rjs)

page.replace_html('TotalPower', render(@TotalPower)) 

任何幫助表示讚賞

回答

0

你有一個app/views/my_apps/refresh.html.erb文件爲HTML格式?這似乎是問題所在。

+0

感謝Finbarr的回答。我在那裏添加了一個refresh.html.erb文件,但是它只是簡單地加載該文件,不管它包含什麼,所以沒有基於AJAX的刷新發生 – rh4games 2011-12-27 04:51:56

0

我通過恢復format.html和format.js的順序來解決我的問題,如下所示。我不知道這是否是正確的方式,但它對我有用,我不再看到丟失的模板錯誤。

respond_to do |format| 
    if @my_app.update_attributes(params[:my_app]) 
    format.js 
    format.html { render :action => "refresh", :notice => 'Update SUCCESSFUL!' } 
    else 
    format.html { render :action => "edit" } 
    format.json { render :json => @my_app.errors, :status => :unprocessable_entity } 
    end 
end 
0

的這裏的問題是,你的形式做一個正常的要求,而不是這就是爲什麼它試圖加載refresh.html一個Ajax請求insted的你refresh.js的。爲了解決這個,你需要在你的表單如遠程選項,我認爲:

<%= form_for(@my_app, :remote => true, :html => {:name => "MyAppInfo"}) do |f| %> 

並不確切地知道它在哪裏去,不見裏面去HTML選項散列嘗試,直到你在你的頁面的源代碼見尾聲,表格有選項data-remote="true"

+0

認爲這是正確的答案,他將遠程屬性添加到他提交按鈕,但他需要將其添加到整個表單中 – IBueno 2015-08-06 10:09:26