AJAX请求返回缺少的模板

时间:2011-12-26 18:40:15

标签: ruby-on-rails ajax templates select

我正在努力使用我的第一个基于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请求,以便实时更新表单的某些文本字段,而无需按下按钮或重新加载整个页面。

这些是我的代码的相关部分:

新编辑方法和编辑方法使用的部分表单app / views / 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 %>

app / controllers / 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

app / views / my_apps / refresh.js.erb(我也尝试将它重命名为refresh.js.rjs,但也没有运气)

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

感谢任何帮助

3 个答案:

答案 0 :(得分:0)

你有html格式的app/views/my_apps/refresh.html.erb文件吗?这似乎是个问题。

答案 1 :(得分: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

答案 2 :(得分:0)

这里的问题是您的表单正在发出正常请求,而不是ajax请求,这就是为什么它尝试加载refresh.html refresh.js的{​​{1}}。要解决此问题,您需要在表单中包含远程选项,我认为:

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

不知道它在哪里,在那里或在de html选项内部哈希尝试它,直到你在页面的源代码中看到该表单具有de data-remote="true"