1

I have followed the answers suggested on other questions on SO (this question and this question ), but for some reason I can't get my like button counter to work properly with ajax. My counter changes only after a refresh, any help is appreciated thanks!

meals_controller.rb

def upvote  
    @meal.upvote_from current_user 
      if request.xhr?
        render json: { count: @meal.get_upvotes.size, id: params[:id] }
      else
        redirect_to meals_path
      end
  end

  def unlike
    @meal.unliked_by current_user 
    redirect_to meals_path
  end
routes.rb

Rails.application.routes.draw do
  devise_for :users
  root 'home#index'

  resources :meals do
    member do
      put "like" => "meals#upvote"
      put "unlike" => "meals#unlike"
    end
  end

#upvote.coffee

$(document).on 'ajax:success', 'a.vote', (status,data,xhr)->
  $(".votes-count[data-id=#{data.id}]").text data.count
  return

#index.html.erb

<p id="notice"><%= notice %></p>

<h1>Listing Meals</h1>


    <% @meals.each do |meal| %>
     <%= meal.title %>
     <br>
     <%= meal.descriptionttext %>
     <%= link_to like_meal_path(meal), class: "vote", method: :put, remote: true do %>
     <button>
     <span class="votes-count" data-id="<% meal.id %>"><%= meal.get_likes.size %></span>
     </button>
     <% end %>

      <%= link_to unlike_meal_path(meal), method: :put do %>
     <button type="button">
     <span><%= meal.get_upvotes.size%></span>
     </button>
     <% end %>



     <br>
    <% end %>
<br>
Community
  • 1
  • 1
RickD
  • 79
  • 13

0 Answers0