充当投票者 - 刷新主页上的点赞数 [Rails - AJAX]
Acts as votable - refresh likes-count on home page [Rails - AJAX]
我对投票表决有一点疑问。
我的每个 "softwares" 页面上的点赞按钮和计数都正确刷新(使用 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>
routes.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]
这一行:
$(".likes-count").addClass("liked").html('<%= @software.get_upvotes.size %>');
正在更新 .likes-count
class 所有元素的显示投票计数值。要解决此问题,请更改:
<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 %>');
我对投票表决有一点疑问。
我的每个 "softwares" 页面上的点赞按钮和计数都正确刷新(使用 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>
routes.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]
这一行:
$(".likes-count").addClass("liked").html('<%= @software.get_upvotes.size %>');
正在更新 .likes-count
class 所有元素的显示投票计数值。要解决此问题,请更改:
<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 %>');