2016-02-11 2 views
0

Этот код в порядке. но каждый раз мне нужно перезагрузить страницу, чтобы увидеть, как работает кнопка. не знаю, почему он не отвечает. show.html.erbresponse_to: js не работает gem 'act_as_votable' rails

<span class="like-count"><%= pluralize(@property.cached_votes_up, 'like') %></span> 
<%= render 'shared/actions', resource: @property %> 

общий/_actions.html.erb

<% if user_signed_in? %> 
    <%= render 'likes/form', likeable: resource %> 
<% end %> 

любит/_form.html.erb

<% if current_user.liked? likeable %> 
     <%= form_tag unlike_path(likeable_type: likeable.class.to_s, likeable_id: likeable.id), method: :post, remote: true, data: { type: :json } do %> 
      <% button_tag class: 'btn btn-block liked' do %> 
       <%= fa_icon 'thumbs-up' %> unlike 
      <% end %> 
     <% end %> 
    <% else %> 
     <%= form_tag like_path(likeable_type: likeable.class.to_s, likeable_id: likeable.id), remote: true, data: { type: :json } do %> 
      <% button_tag class: 'btn btn-block' do %> 
       <%= fa_icon 'thumbs-up' %> like 
      <% end %> 
     <% end %> 
    <% end %> 

любит/create.js.erb

$("#<%= @likeable_type.downcase %>-<%= @likeable.id %> .like").html("<%=j render('likes/form', likeable: @likeable) %>"); 
$("#<%= @likeable_type.downcase %>-<%= @likeable.id %> .like-count").html("<%= pluralize(@likeable.cached_votes_up, 'like') %>"); 

likes/destroy.js.erb

$("#<%= @likeable_type.downcase %>-<%= @likeable.id %> .like").html("<%=j render('likes/form', likeable: @likeable) %>"); 
$("#<%= @likeable_type.downcase %>-<%= @likeable.id %> .like-count").html("<%= pluralize(@likeable.cached_votes_up, 'like') %>"); 

likes_controller.rb

class LikesController < ApplicationController 
    before_action :find_likeable 
    respond_to :js 

    def create 
    @likeable.liked_by current_user 
    @likeable.create_activity(:like, owner: current_user) 
    respond_to do |format| 
     format.js 
    end 
    end 

    def destroy 
    @likeable.disliked_by current_user 
    activity = PublicActivity::Activity.find_by_trackable_id_and_key(@likeable.id, "#{@likeable_type.downcase}.like") 
    activity.destroy if activity.present? 
    respond_to do |format| 
     format.js 
    end 
    end 

    private 
    def find_likeable 
    @likeable_type = params[:likeable_type].classify 
    @likeable = @likeable_type.constantize.find(params[:likeable_id]) 
    end 
end 

likes_helper.rb

module LikesHelper 
    def find_like(likeable) 
    likeable.get_likes.where(user: current_user) 
    end 
end 

не знаю, почему он не работает. Есть идеи?

+0

Что не работает? Какова ошибка и ожидаемое поведение? – Oleander

+0

, когда я нажимаю кнопку, чтобы она не показывалась в отличие от кнопки, как ожидалось. Мне нужно перезагрузить страницу. – Mezbah

+0

Не перезагружается ли страница при нажатии кнопки? – Oleander

ответ

0

Попробуйте это. Он будет переключать подобную кнопку.

<%= form_tag unlike_path(likeable_type: likeable.class.to_s, likeable_id: likeable.id), method: :post, remote: true, data: { type: :json }, class: "unlike #{"hidden" unless current_user.liked?(likeable)}" do %> 
    <% button_tag class: 'btn btn-block liked' do %> 
     <%= fa_icon 'thumbs-up' %> unlike 
    <% end %> 
<% end %> 

<%= form_tag like_path(likeable_type: likeable.class.to_s, likeable_id: likeable.id), remote: true, data: { type: :json }, class: "unlike #{"hidden" if current_user.liked?(likeable)}" do %> 
    <% button_tag class: 'btn btn-block' do %> 
     <%= fa_icon 'thumbs-up' %> like 
    <% end %> 
<% end %> 

<script type="text/javascript"> 
    $(function() { 
     $(".unlike").on("ajax:success", function() { 
      $(".unlike").addClass("hidden"); 
      $(".like").removeClass("hidden"); 
     }); 

     $(".like").on("ajax:success", function() { 
      $(".like").addClass("hidden"); 
      $(".unlike").removeClass("hidden"); 
     }); 
    }) 
</script> 

<style type="text/css"> 
    .hidden { 
     display: none; 
    } 
</style> 

Возможно, вы захотите добавить загрузочное сообщение, используя ajax:beforeSend.

+0

не работает – Mezbah

+0

, пожалуйста, объясните. – Oleander

+0

Я разместил ваш код в файле _form.html.erb и отобразил его. ajax не работает. Я нажал понравившуюся кнопку и все еще нужно перезагрузить полную страницу, чтобы увидеть эффект. (спасибо за ваш ответ) – Mezbah