터보 링크를 사용할 때 간단한 클릭 이벤트로 컨트롤러 동작에 데이터를 전송하는 "레일 웨이"란 무엇입니까?레일 웨이 : 터보 링크를 사용하여 컨트롤러에 클라이언트 데이터 보내기
두 개의 링크가있는 페이지가 있는데 하나는 /food
이고 다른 하나는 /drinks
입니다. 내 목표는 일부 위치 데이터를 (geolocation
API를 통해) 컨트롤러에 보내고 해당 위치 데이터를 처리 한 후 적절한보기를 렌더링하는 것입니다.
사용자를 적절한 경로로 이동하고 요청과 함께 데이터를 전송하는 가장 적은 저항 경로는 무엇입니까?
각 단추를 양식으로 묶어서 게시 요청을 보내야합니까?
Turbolinks를 도용/해제하고 자체적으로 렌더링을 관리해야합니까? 클릭 이벤트에서 XHR을 통해 데이터를 전송하는 경우 컨트롤러는 개의 요청을 수신합니다. 하나는 터보 링크이고 다른 하나는 내 처리기로, 이는 바람직하지 않습니다.
응용 프로그램/컨트롤러/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>
: 여기
몇 가지 코드 앱/에셋/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)
})()
시원한. 따라서 터보 링크를 사용하지 말고'render' 또는'redirect_to'를 사용하여 컨트롤러에서 페이지 변경을 처리하는 것이 가장 좋은 방법이라고 생각하십니까? –
터보 링크를 활성화하려면 'link_to'를 사용하십시오. 업데이트 된 답변보기 – drowzy
링크 클릭과 독립적으로 POST 요청을 보냈습니다. 따라서 사용자가 도착하면 지리 데이터를 가져 와서 데이터를 세션 변수로 저장하는 컨트롤러 메소드로 보냅니다. 여전히 터보 링크를 사용할 수 있으며 페이지간에 데이터가 지속됩니다. –