Без HAML я бы так и сделал:
На странице запроса измените строку form_tag
, включив в нее remote: true
, чтобы форма отправлялась с ajax. Как это:
<%= form_tag({controller: "r4d", action: "result"}, method: :get, remote: true) do %>
Также поместите пустой div в нижней части страницы, чтобы получить результаты и дать ему идентификатор:
<div id="query-results"></div>
В действии контроллера укажите, что он отвечает на ajax-запрос, заменив вызов render
на вызов responds_to
, подобный этому:
@answer = result.value
respond_to :js
Затем создайте соответствующий файл javascript, чтобы поместить ответ на страницу. Он должен быть под /app/views/r4d/
, и в моем случае (без HAML) файл будет называться result.js.erb
, чтобы соответствовать имени действия.
Это будет содержимое (я использую jQuery здесь):
$('#query-results').html("<%= j render(partial: 'answer_table', locals: {answer: @answer}) %>");
Это сделает частичный HTML-код /app/views/r4d/_answer_table.html.erb
, передав его как локальный ответ, затем сделает рендеринг в безопасную строку javascript (это то, что делает j
), а затем, когда js запустится, заменит любой контент в этом div, который мы сделали с новым рендерингом.
Теперь нам просто нужно частичное (`/app/views/r4d/_answer_table.html.erb):
<table id="secondary">
<tr>
<th>Key</th>
<th>Value</th>
</tr><tr>
<td>Trip ID</td>
<td><%= answer %></td>
</tr>
</table>
Вы должны будете выполнить конвертацию в HAML самостоятельно (или просто запустить ее через онлайн-конвертер).