使用 acts_as votabable gem 点赞,并希望在用户点赞后将心形颜色永久更改为红色

using acts_as votabable gem for likes and want to change the heart color to red permanently after user has liked

我正在使用 acts_as votable gem 并且在用户使用 javascript 单击心形后我设法将心形颜色更改为红色.但是,一旦服务器刷新,心脏就会再次变灰,并且没有迹象表明用户是否喜欢当前的 post。如何在用户喜欢后永久更改颜色。我的想法是在投票 table 中将布尔值设置为 true,然后以某种方式在视图中检查它。但我不确定如何准确地实施它。任何帮助将不胜感激。

lists_controller.rb

def vote
 if !current_user.liked? @list
  @list.liked_by current_user
 elsif current_user.liked? @list
  @list.unliked_by current_user
end

vote.js.erb

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

show.html.erb

<div class="like">
   <%= link_to like_list_path(@list), :class => "like-btn", method: :put, remote: :true do %>
        <i class="fa fa-heart"></i>
      <% end %>
      <%= link_to "", "data-toggle" => "modal", "data-target" => "#likeModalLong" do %>
        <span class="likes-count"><%= @list.get_upvotes.size %></span>
      <% end %>
    </div>

您可以创建一个助手来使 liked css class 在您的视图中持久化:

application_helper

def liked_list(list)
  liked = current_user.liked?(list) ? 'liked' : ''
  content_tag(:i, '', class: "fa fa-heart #{liked}")
end

show.html.erb

<%= link_to like_list_path(@list), :class => "like-btn", method: :put, remote: :true do %>
  <%= liked_list(@list) %>
<% end %>