По моему мнению, если вы хотите посчитать или сохранить частоту просмотра каждого видео, вы должны настроить отслеживание
ActiveStorage::YourController at 'show' action
Примерно так:
# In app/controllers/active_storage/base_controller.rb
class ActiveStorage::BaseController < ActionController::Base
before_action :your_implemnt_method!
include ActiveStorage::SetCurrent
protect_from_forgery with: :exception
def your_implemnt_method!
## check what the video you want to increment.
# and increment number of seen in model via direct for queue it to backgroud worker
content.plus_seen
# do something more.
end
end
до couter_cache или увеличить число зрителей, ... et c
Другое решение: вы хотите посчитать количество нажатий кнопки воспроизведения, просто используя javascript обрабатывать событие нажатия, чтобы отправлять ajax запрос к контроллеру увеличить счетчик.
JS код с ручкой воспроизведения
const player = new Plyr('#player');
$('.plyr__control[data-plyr="play"]').click(function() {
if (!player.source){
Rails.ajax({
type: "POST",
url: "/url-to-do-sth",
data: {your_data: data-to-sent},
success: function(repsonse){
},
error: function(repsonse){
console.log(repsonse);
}
})
}
})
А в вашем контроллере:
def handle-sth
begin
## Do sothing
# and increment number of seen in model via direct for queue it to backgroud worker
content.plus_seen
render json: {data: data-to-sent}
rescue
render :json => { :errors => ["Error with encode or decode."] }, :status => 422
end
end