неопределенный метод `upVote_request_path 'для # <#: 0x000056436a5e59a8> - PullRequest
0 голосов
/ 23 февраля 2019

Я получаю следующую ошибку, и я не уверен, что ее вызывает.Я получаю это как ошибку 500, когда мой файл js работает

undefined method `upVote_request_path' for #<#<Class:0x00007f3aa08b13c0>:0x000056436a5e59a8>

Вот HTML

<tbody>
    <% @requests.each do |request| %>
      <tr data-request-id="<%= request.id %>">
        <td style="text-align: center"><%= request.artist %></td>
        <td style="text-align: center"><%= request.title %></td>
        <td style="text-align: center" class="voteCount"><%= request.voteCount %></td>
        <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>
      </tr>
    <% end %>
  </tbody>

Вот метод в моем контроллере

def upvote
  request = Request.find(params[:id])
  request.upvote! 
  render json: { voteCount: request.voteCount } 
end

Вот мойroute.rb

Rails.application.routes.draw do
  resources :requests
  post '/requests:id', to: 'requests#upVote', as: 'Vote'
end

А вот моя функция метода JS upVote () {

    var count = document.getElementsByClassName("voteCount")[0].innerHTML;
    count = parseInt(count);
    count = count + 1;
    count = count.toString();
    document.getElementById("voteCount").innerHTML = count;
    document.getElementById("voteButton").disabled = "true";

 }

Ответы [ 2 ]

0 голосов
/ 23 февраля 2019

Я думаю, вы просто пытаетесь увеличить столбец голосования в своей модели запросов, не обновляя страницу?

Если вы создадите путь к методу вашего контроллера следующим образом:

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, если это не то, что вам нужно.

0 голосов
/ 23 февраля 2019

post '/requests', to: 'requests#upVote' не определяет используемый вами путь

, если вы хотите назвать этот путь, вы можете использовать :as arg.

run rake routes и еговыведет все доступные маршруты в соответствии с вашим маршрутом, который поможет вам найти правильный синтаксис для вашего маршрута upvote.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...