Кнопка «Мне нравится / не нравится» не работает должным образом, когда страница перезагружается после добавления сообщения - PullRequest
0 голосов
/ 20 ноября 2018

Мой код в index.html.erb:

<li class="list-group-item">
    Post --> <%= post.message %>
    <% if logged_in? && @current_user != user %>
        <% if find_like(post.id, @current_user.id) != 0 %>
            <%= link_to "Unlike", 'javascript:void(0)', class: "btn btn-default like-right-position like-btn", data: { user_id: @current_user.id, likeable_id: post.id, likeable_type: 'Post', like: false } %>
        <% else %>
            <%= link_to "Like", 'javascript:void(0)', class: "btn btn-default like-right-position like-btn", data: { user_id: @current_user.id, likeable_id: post.id, likeable_type: 'Post', like: true } %>
        <% end %>
    <% end %>
    <span id="post_<%= post.id %>_likes" class="like-right-position" data-like-id='0'><%= pluralize(post.likes.size, "like") %></span>
</li>

application_helper.rb file

def find_like post_id, user_id
    like = Post.find(post_id).likes.find_by(user_id: user_id)
    return like.present? ? like.id : 0
end

В файле ниже у меня есть проблема с тем, как передать атрибут в запросе ajax метода удаления файл application.js

$('.like-btn').click(function(){
    var likeable_id = $(this).attr('data-likeable-id');
    var likeable_type = $(this).attr('data-likeable-type');
    var user_id = $(this).attr('data-user-id');
    var like_id = $('#post_' + likeable_id + '_likes').attr('data-like-id');
    if ($(this).html() == "Like") {
        $.ajax({
            type: "POST",
            url: "/users/" + user_id + "/likes", 
            dataType: 'script',
            data: {
                'likeable_id': likeable_id,
                'likeable_type': likeable_type,
                'like': true
            }
        });
        $(this).html('Unlike');
    }
    else {
        $.ajax({
            type: "DELETE",
            url: "/users/" + user_id + "/likes/" + like_id, 
            dataType: 'script',
            data: {
                'likeable_id': likeable_id,
                'like': false
            }
        });
        $(this).html('Like');
    }
    return false;
});

likes_controller.rb

class LikesController < ApplicationController
    def new
        @like = Like.new
    end
    def create
        @post = Post.find(params[:likeable_id])
        @like = Like.create( like: params[:like], likeable_id: params[:likeable_id], likeable_type: params[:likeable_type], user_id: params[:user_id] )
        if @like.present?
            respond_to do |format|
                format.html { redirect_back(fallback_location: root_path) }
                format.js 
            end
        else
            redirect_back(fallback_location: root_path)
        end
    end
    def destroy
        @post = Post.find(params[:likeable_id])
        @like = Like.find(params[:id])
        respond_to do |format|
            format.html { redirect_to(fallback_location: root_path) }
            format.js {}
        end
        @like.destroy
    end
end

create.js.erb

$('#post_<%= @post.id %>_likes').empty().append('<span id="post_<%= @post.id %>_likes" class="like-right-position"><%= pluralize(@post.likes.size, "like") %></span>');
$('#post_<%= @post.id %>_likes').attr('data-like-id', "<%= @like.id %>" );

delete.js.erb

$('#post_<%= @post.id %>_likes').attr('data-like-id', "0" );
$('#post_<%= @post.id %>_likes').empty().append('<span id="post_<%= @post.id %>_likes" class="like-right-position"><%= pluralize(@post.likes.size, "like") %></span>');

Кнопка «Мне нравится / не нравится» на странице работает, но после добавления сообщения и перезагрузки страницы кнопка «Не нравится» не работает. Заранее спасибо !!!

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