Что такое «способ Rails» для отправки данных в действие контроллера при простом событии щелчка при использовании турболыков?
У меня есть страница с двумя ссылками: одна указывает на /food
, а другая - на /drinks
. Моя цель - отправить некоторые данные о местоположении (через geolocation
api) контроллеру, а затем отобразить соответствующее представление после обработки этих данных о местоположении.
Каков путь наименьшего сопротивления, чтобы направить пользователя по соответствующему пути и отправить данные вместе с запросом?
Следует ли каждую кнопку обернуть в форму и отправить запрос по почте?
Должен ли я захватить / отключить Turbolinks и самостоятельно управлять рендерингом? Если я просто отправлю данные через XHR о событии щелчка, контроллер получит 2 запроса: один от Turbolinks, а другой от моего обработчика, что нежелательно.
Вот код:
app / controllers / drinks_controller.rb
class DrinksController < ApplicationController
def index
# Ideally, I would like to check for POST or GET data here
# and send as a parameter to get_a_venue
@venue = get_a_venue(:drinks)
end
end
приложение / просмотры / напитки / index.html.erb
<% provide(:title, @venue[:name]) %>
<!-- body content -->
<div class="row buttons">
<div class="small-12 medium-6 columns">
<h3>
<%= link_to 'Try Another One', drinks_path, class: "button expand radius choice" %>
</h3>
</div>
<div class="small-12 medium-6 columns">
<h3>
<%= link_to "I Want Some Food Instead", food_index_path, class: "button expand radius choice" %>
</h3>
</div>
</div>
app / assets / javascripts / handlers.js
$(function() {
// success callback sets an in scope variable to the location coordinates
navigator.geolocation.getCurrentPosition(success, error, options)
document.addEventListener('click', function(e) {
if (e.currentTarget.nodeName === 'A' &&
e.currentTarget.classList.contains('choice') {
// send data via ajax here?
}
}, false)
})()