Кнопка Ruby On Rails Ajax Javascript Like/Unlike в выпуске ленты с Js

Я новичок в Ruby on Rails, я использовал гем act_as_votable для создания кнопок Like и Unlike для создания пользователям Like и Unlike Post, и, следуя руководству пользователя Stack Overflow, я изменил кнопки с Like на Unlike и Обновление счетчика само по себе без обновления страницы с использованием javascript/ajax, как вы можете видеть здесь: Rails Acts_as_votable Gem Like / Unlike Buttons with Ajax

Теперь в показе поста (с одним постом) нет проблем, но в представлениях, которые имеют много постов (как в профиле пользователя, так и на стене / в доме с "фидом", постом всех последующих пользователей) есть такая ошибка: если мне нравится Пост 1, а затем как Пост 2, когда я пытаюсь отличаться от Поста 2, он не любит Пост 1.

Представление кажется хорошим, пока я не обновляю страницу, но при наведении на нее я вижу, что вместо posts/2/ в отличие от вызывающих posts/1/ в отличие. В общем, первый пост, который мне нравится, единственный, на который я не похож. Я не очень разбираюсь в JavaScript, поэтому предполагаю, что проблема заключается в таких файлах, как Like.js.erb и Unlike.js.erb. Дайте мне знать, если вы понимаете ошибку! Заранее спасибо.

Код

Post Controller имеет

def like
@post = Post.find(params[:id])
@post.liked_by current_user
respond_to do |format|
format.html { redirect_to :back }
format.js { render layout: false }
end
end

def unlike
@post = Post.find(params[:id])
@post.unliked_by current_user
respond_to do |format|
format.html { redirect_to :back }
format.js { render layout: false }

end
end

Javascript является следующим: like.js.erb

$('.like_post').bind('ajax:success', function(){
$(this).parent().parent().find('.vote_count').html('<%= escape_javascript   @post.votes_for.size.to_s %>');
 $(this).closest('.like_post').hide();
 $(this).closest('.votes').html(' <%= link_to "Unlike",      unlike_post_path(@post), remote: true, method: :get, class: 'btn btn-default     btn-sm unlike_post' %>');
 });

unlike.js.erb

 $('.unlike_post').bind('ajax:success', function(){
 $(this).parent().parent().find('.vote_count').html('<%= escape_javascript   @post.votes_for.size.to_s %>');
 $(this).closest('.unlike_post').hide();
 $(this).closest('.votes').html(' <%= link_to "Like", like_post_path(@post),   remote: true, method: :get, class: 'btn btn-primary btn-sm like_post' %>');
 });

Одно из представлений, которое не работает (они оба в основном одинаковы): _post.html.erb (это профиль с большим количеством сообщений пользователя)

<div class="votes">
<%if (current_user.liked? post) %>


<%= link_to "Unlike", unlike_post_path(post), method: :get, class: "btn btn- default btn-sm unlike_post", remote: true %>

<%else %>
<%= link_to "Like", like_post_path(post),  method: :get, class: "btn btn-    primary btn-sm like_post", remote: true %>
     <%end %>
     </div>
    <span class="vote_count">
     <%= post.get_likes.size %>
     </span>
     likes
     </li>

А маршруты есть

resources :posts do
resources :comments
member do
get 'like', to: "posts#like"
get 'unlike', to: "posts#unlike"
end
end

0 ответов

Другие вопросы по тегам