Обновление подсчета лайков без перезагрузки страницы в Rails - PullRequest
0 голосов
/ 01 апреля 2019

Я использую гем act_as_votable и пытаюсь обновить число лайков на странице просмотра без перезагрузки страницы.Я перепробовал много руководств и дошел до того, что сама страница не перезагружается, но все сообщения исчезают, а затем появляются с обновленным счетчиком.Я пытаюсь помешать постам делать это.И цель remote.request_ip - иметь возможность голосовать без создания учетной записи.

Видеоконтроллер

def like
  @video.upvote_from current_user
  render layout: false
end

def upvote
  @video = Video.find(params[:id])
  @ip = request.remote_ip
  was_it_upvoted = Ipaddresstracker.find_by(ipaddress: @ip, videoid: @video.id)
  if was_it_upvoted
    @video.downvote_by User.first
    was_it_upvoted.delete
  else
    Ipaddresstracker.create(:ipaddress => @ip, :videoid => @video.id)
    @video.vote_by voter: User.first, :duplicate => true
  end
  redirect_to :back
end

like.js.haml

:plain
  $('#like-count').html("#{@article.get_upvotes.size}");

_index.html.erb

<div class="btn-group">
    <%= link_to like_video_path(x), method: :put, remote: :true, id: "like-count", class: "btn btn-default btn-sm" do %>
        <span class="glyphicon glyphicon-chevron-up"></span>
        Upvote
        <div> <%= x.get_upvotes.size %> </div>
    <% end %>
<div> 

Маршруты

resources :videos do#, only: [:index, :show] do
  member do
    put "like", to: "videos#upvote"
    put "dislike", to: "videos#downvote"
    put "like" => "videos#like"
    put "unlike" => "videos#unlike"
  end
end

1 Ответ

1 голос
/ 02 апреля 2019

Если вы хотите обнаружить изменения, выполненные другими пользователями, вам нужно использовать кабель действия или сокеты, но если вы хотите просто создать сообщение после понравившегося действия, то вам нужно добавить add:

respond_to do |f|
  f.js
end

Затем в соответствующем файле представления к вашему действию добавьте js-код, который обновит визуальный эффект вашего подобного действия. Например:

 $('#like-count').html("#{@article.get_upvotes.size}");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...