Действует как голосующий - обновите количество лайков на домашней странице [Rails - AJAX] - PullRequest
0 голосов
/ 05 июня 2018

У меня небольшая проблема с актами голосования.

Кнопка «Мне нравится», и счет обновляется корректно (с помощью AJAX) на странице каждого из моих «программ».Но не работает должным образом на домашней странице (или есть несколько программ).

Когда я нажимаю кнопку «Мне нравится» (на моей домашней странице), количество лайков обновляется, но значение обновляется и идентичнодля всех программ (но когда я вручную обновляю страницу, значения верны).

Я не могу найти решение этой проблемы.

Мои коды:

softwares_controller.rb

 def upvote
    if !current_user.liked? @software
      @software.liked_by current_user
    elsif current_user.liked? @software
      @software.unliked_by current_user 
    end
    respond_to do |format|
        format.html { redirect_back(fallback_location: root_path) }
        format.js 
        end
  end 

softwares / show

<%= link_to like_software_path(@software), class:"like-btn", method: :put, remote: true do %> 
    <button class="btn btn-warning"> 
      <span><p><i class="fa fa-thumbs-up fa-lg" aria-hidden="true"></i></p></span>
    </button> 
<% end %>
<span class="likes-count"> <%= @software.get_upvotes.size %> </span> 

просмотр домашней страницы

<%= link_to like_software_path(software), class:"like-btn", method: :put, remote: true do %> 
    <button class="btn btn-warning"> 
      <span><p><i class="fa fa-thumbs-up fa-lg" aria-hidden="true"></i></p></span>
    </button> 
<% end %>
<span class="likes-count"> <%= software.get_upvotes.size %> </span>  

rout.rb

resources :softwares do
  member do
    put "like" => "softwares#upvote"
    put "dislike" => "softwares#downvote"
  end
end

softwares / upvotes.js.erb

<% if current_user.liked? @software %>
   $(".likes-btn").addClass("liked");
<% else %>
   $(".likes-btn").removeClass("liked");
<% end %>
   $(".likes-count").addClass("liked").html('<%= @software.get_upvotes.size %>');

РЕДАКТИРОВАТЬ: Или когда я меняю свою домашнюю страницу с:

<%= link_to like_software_path(@software), class:"like-btn", method: :put, remote: true do %> 
    <button class="btn btn-warning"> 
      <span><p><i class="fa fa-thumbs-up fa-lg" aria-hidden="true"></i></p></span>
    </button> 
<% end %>
<span class="likes-count"> <%= @software.get_upvotes.size %> </span> 

У меня есть ошибка:

No route matches {:action=>"upvote", :controller=>"softwares", :id=>nil}, missing required keys: [:id]

1 Ответ

0 голосов
/ 06 июня 2018

Эта строка:

$(".likes-count").addClass("liked").html('<%= @software.get_upvotes.size %>');

обновляет отображаемое значение подсчета голосов всех элементов с классом .likes-count.Чтобы исправить это, измените:

<span class="likes-count"> <%= software.get_upvotes.size %> </span>

, чтобы включить id программного обеспечения, и укажите его в своем js.

<span class="likes-count" id="software-<%= software.id %>">
  <%= software.get_upvotes.size %>
</span>

softwares / upvotes.js.erb

$("#software-<%= @software.id %>").addClass("liked").html('<%= @software.get_upvotes.size %>');
...