AJAX-запрос возвращает отсутствующий шаблон - PullRequest
2 голосов
/ 26 декабря 2011

Я борюсь с моим первым приложением на основе 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 %>

Выдержка из приложения / 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 голосов
/ 04 января 2012

Я исправил свою проблему, просто изменив порядок форматов 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 голосов
/ 24 августа 2012

Проблема в том, что ваша форма выполняет обычный запрос, а не ajax-запрос, поэтому она пыталась загрузить refresh.html вместо вашего refresh.js.Чтобы решить эту проблему, вам нужно включить опцию удаленного доступа в форму, как это, я думаю:

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

Не знаю точно, куда он идет, там или внутри хэш-опций de html попробуйте, пока не увидите в своемисходный код страницы, что форма имеет опцию де data-remote="true".

0 голосов
/ 27 декабря 2011

У вас есть app/views/my_apps/refresh.html.erb файл для формата html?Кажется, это проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...