Ответ 1
Для этого необходимо присутствовать несколько вещей, в том числе: remote = > флаг true в элементе запуска, флаг response_to: js в определении класса контроллера, частичный вид и, наконец, jquery на самом деле рендеринг динамической частичной части должен содержаться в отдельном файле .html.js.
Примеры ниже приведены для фиктивного метода" render_partial_form "контроллера" someajax".
1) Добавить: remote = > флаг true в элемент запуска
поставьте флаг: remote = > true в теге ссылки или формы в файле .html.erb(представление) для элемента, который вы хотите вызвать вызов AJAX, например
<%= form_tag("/someajax", method: 'post', :remote => true) do %>
с: remote = > true, rails не будет автоматически переключать представления, что позволяет запускать JQuery. Это можно использовать с тегами form_tag, link_tag или других типов.
2) Добавьте "reply_to: html,: js" в верхней части контроллера
В верхней части определения класса контроллера вы должны теперь указать, что контроллер может отвечать на javascript, а также на html:
class SomeajaxController < ApplicationController
respond_to :html, :js
...
def render_partial_form
@array_from_controller = Array.new
...
end
end
В этом примере переменная передается из контроллера в представление: массив параметров списка выбора, называемый @array_from_controller
.
3) Проложите http-глагол к вашему методу контроллера
Поскольку я хотел, чтобы форма POSTED вызывала вызов AJAX, я направил пост-глагол для моего контроллера в представление render_partial_form.
post 'someajax' => 'someajax#render_partial_form
Метод контроллера, определенный def render_partial_form
, совпадает с именем представления _render_partial_form.html.erb
, поэтому нет необходимости вызывать действие визуализации с контроллера.
4) Создайте частичный вид
Частичный вид должен иметь то же имя, что и ваш метод контроллера, и начинаться с подчеркивания: _render_partial_form.html.erb
<h3>Here is the partial form</h3>
<%= form_tag("/next_step", method: 'post') do %>
<%= label_tag(:data, "Some options: ") %>
<%= select_tag(:data, options_for_select(@array_from_controller.transpose[0].collect)) %>
<%= submit_tag('Next') %>
<% end %>
5) Создайте файл JQuery
Операторы JQuery запускают визуализацию формы. Замените "render_partial_form" на фактическое имя вашего метода контроллера и частичного представления. Эффект slideDown является необязательным "глазной конфеткой".
Создайте файл с расширением .js.erb и тем же именем, что и ваш контроллер:
render_partial_form.js.erb
$('#render_partial_form').html("<%= escape_javascript (render partial: 'render_partial_form') %>");
$('#render_partial_form').slideDown(350);