У вас есть несколько вариантов: если вы хотите придерживаться своего обработчика onclick, просто передайте идентификатор запроса в вашу функцию upVote ().Это может выглядеть так:
<td><button onclick="upVote(<%= request.id %>)">Vote</button></td>
Затем в вашей функции JS upVote(requestID)
сделайте все, что нужно, чтобы сделать этот запрос, и соответственно обновите свой пользовательский интерфейс.
Другой, превосходный, вариант будет использовать встроенную в Rails remote link_to helper , которая работает на rails-ujs.Вот как это может выглядеть:
<td><%= link_to 'Vote', [:upvote, request], remote: true, method: :post, class: 'upvote' %></td>
Обратите внимание, что я использую метод POST, поскольку действия, которые имеют побочные эффекты, не должны выполняться с помощью запроса GET.Удостоверьтесь, что вы соответственно направили.
Затем в вашем RequestsController:
def upvote
request = Request.find(params[:id])
request.upvote! # Or do whatever you need to do to upvote it
# Respond to your JS request with whatever updated info it might need to update the UI
render json: { voteCount: request.voteCount } }
end
Наконец, в JS (записанном как CoffeeScript):
$('a.upvote').on 'ajax:success', (event) ->
# Update your UI to reflect the upvote (you can access the JSON returned from your upvote action here to make necessary updates)