Я думаю, вы просто пытаетесь увеличить столбец голосования в своей модели запросов, не обновляя страницу?
Если вы создадите путь к методу вашего контроллера следующим образом:
Routes.rb
resources :requests do
post 'upvote', to: 'requests#upvote'
end
Вы должны получить строку rake routes
, которая выглядит следующим образом;
request_upvote POST /requests/:request_id/upvote(.:format) requests#upvote
ТогдаВы можете упростить html следующим образом:
<td><%= link_to 'Vote', request_upvote_path(request.id), remote: true, method: :post, class: 'upVote' %></td>
Это просто делает все это простым действием обновления.
Если в вашем контроллере столбец voiceCount является целым числом, используйте .increment!метод по запросу, и он будет увеличивать запись и сохранять ее;
def upvote
puts 'upvote'
request = Request.find(params[:request_id])
request.increment!(:voteCount)
render json: { voteCount: request.voteCount }
end
РЕДАКТИРОВАТЬ: Потому что я думаю, что я получил лучшее представление о том, что вы пытались сделать с помощью JavaScript.
Похоже, вы используете кнопку для увеличения HTML-страницы и ссылку для обновления фактической записи, используя мое предложение выше, вы можете изменить две строки:
<td style="text-align: center"><button class = "voteButton" onclick="upVote()">Vote</button></td>
<td><%= link_to 'Vote', [:upVote, request], remote: true, method: :post, class: 'upVote' %></td>
на просто;
<td><%= button_to 'Vote', request_upvote_path(request.id), remote: true, method: :post, onclick: 'upVote()', class: 'upVote' %></td>
и обновление функции;
function upVote() {
var count = document.getElementsByClassName("voteCount")[0].innerHTML;
count = parseInt(count);
count = count + 1;
count = count.toString();
document.getElementsByClassName("voteCount")[0].innerHTML = count;
document.getElementsByClassName("upVote")[0].disabled = "true";
}
Очевидно, что селекторы JS необходимо изменить, чтобы не выбирать каждый счетчик запросов на странице и каждую кнопку upVote, если это не то, что вам нужно.