Javascript Rails方式:使用TurboLink将客户端数据发送到控制器

Javascript Rails方式:使用TurboLink将客户端数据发送到控制器,javascript,ruby-on-rails,ruby,ruby-on-rails-4,turbolinks,Javascript,Ruby On Rails,Ruby,Ruby On Rails 4,Turbolinks,当使用TurboLink时,在简单的点击事件中,向控制器发送数据的“Rails方式”是什么 我有一个有两个链接的页面:一个指向/food,另一个指向/drinks。我的目标是将一些位置数据(通过geolocationapi)发送到控制器,然后在处理该位置数据后呈现适当的视图 将用户导航到适当的路径并随请求一起发送数据的阻力最小的路径是什么 是否应该将每个按钮包装成一个表单并发送post请求 我是否应该劫持/关闭TurboLink并自行管理渲染?如果我只是在单击事件上通过XHR发送数据,控制器会收

当使用TurboLink时,在简单的点击事件中,向控制器发送数据的“Rails方式”是什么

我有一个有两个链接的页面:一个指向
/food
,另一个指向
/drinks
。我的目标是将一些位置数据(通过
geolocation
api)发送到控制器,然后在处理该位置数据后呈现适当的视图

将用户导航到适当的路径并随请求一起发送数据的阻力最小的路径是什么

是否应该将每个按钮包装成一个表单并发送post请求

我是否应该劫持/关闭TurboLink并自行管理渲染?如果我只是在单击事件上通过XHR发送数据,控制器会收到2个请求:一个来自TurboLink,另一个来自我的处理程序,这是不可取的

下面是一些代码:

应用程序/控制器/饮料\u控制器.rb

class-drinkcontroller
app/views/drinks/index.html.erb


app/assets/javascripts/handlers.js

$(函数(){
//成功回调将范围内变量设置为位置坐标
navigator.geolocation.getCurrentPosition(成功、错误、选项)
document.addEventListener('click',函数(e){
如果(e.currentTarget.nodeName=='A'&&
e、 currentTarget.classList.contains('choice'){
//在这里通过ajax发送数据?
}
},错)
})()
例如,您可以使用按钮,这将阻止您的按钮使用TurboLink

或者,您可以收听
页面:在更改
事件之前,执行AJAX请求并返回false。这将取消turbolink请求

比如:

document.addEventListener('page:before-change', function(e) {
  if (e.currentTarget.nodeName === 'A' &&
      e.currentTarget.classList.contains('choice') {
     // do stuff
  }
  return false;
}, false)
如果您想使用TurboLink,但将地理位置作为查询字符串提供给您的控制器,您可以执行
链接到“某物”,某物路径(lat:,lng:)

然后使用
params[:lat]
params[:lng]访问lat,lng

酷。所以你认为最好的方法是避免使用Turbolinks,并使用
渲染
重定向到
?当然可以,如果你想保持Turbolinks活动,可以使用
链接到
处理控制器中的页面更改。请参阅更新的答案。我最终发送了一个独立于链接点击的POST请求。因此,美国er到达后,我们获得地理数据,并将其发送到控制器方法,该方法将数据保存为会话变量。仍然可以使用TurboLink,数据在页面之间保持不变。