Rails - Ajax с частичным увеличением counter_cache на 2 вместо 1 - PullRequest
0 голосов
/ 30 января 2020

На странице mov ie, такой как "/ batman", есть кнопка с надписью "Seen This". При щелчке он увеличивает значение seens_count на 1.

В консоли rails я вижу, что он увеличивается только на единицу, но мое частичное увеличение JS увеличивается на 2. Если я обновлю sh страницу после нажатия кнопка возвращается к 1.

Почему отображается 2 вместо 1? Когда фактическое значение seens_count равно 1.

/ movies / show. html .erb:

<div id="count-seens">
  <%= @movie.seens_count %> (Shows 2 after clicking Ajax button, should show 1)
  <%= @movie.seens.count %> (Correctly shows 1 after clicking Ajax button)
</div>

<%= link_to "I've Seen This", movie_create_seen_path(movie), method: :post, remote: true, class: "button" %>

/ movies / seens / create. js .erb

$("#count-seens").html("<%= j render partial: 'movies/count_seens', locals: { movie: @movie } %>");

seens_controller.rb:

def create
  @movie.seens.where(user_id: current_user.id).first_or_create

  respond_to do |format|
    format.html { redirect_to @movie }
    format.js
  end
end

seen.rb:

belongs_to :movie, counter_cache: true

У меня также есть некоторые проверки для определенных c фильмов. Для этих фильмов пользователи не могут видеть, но для этих страниц counter_cache увеличивается на 1. Когда я обновляю sh страницу, она возвращается к 0 - как и должно быть. В любом случае, похоже, что у каждого счетчика кеша есть призрак "+1".

1 Ответ

1 голос
/ 06 февраля 2020

Подсчет показывает неправильные значения, когда использование счетчика кэша является известной проблемой в Rails 4.1.14.1, 4.2.5.1, 5.0.0.beta2.

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

Может быть что-то вроде этого:

belongs_to :movie, counter_cache: :movie_seen_count

Также смотрите обсуждение, связанное с этой проблемой здесь

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