Подсчет, сколько раз изображение появляется на экране ОШИБКА - PullRequest
0 голосов
/ 06 апреля 2020

У меня есть проект Ruby на Rails 6 с темой bulma. На моих страницах много фотографий. и я хочу напечатать информацию о том, сколько раз люди смотрят на эти фотографии.

Я также изучал https://github.com/charlotte-ruby/impressionist, но я не уверен, что это рабочие рельсы 6.

И я использую Ruby на рельсы 6.0.2.2 verison . Это важно, когда я использую рельсы 5, это работает. но теперь я использую rails 6, и у меня возникла проблема с опечаткой.

Я знаю, в чем проблема. Но я не могу решить эту проблему. Мне нужна помощь.

сообщение об ошибке консоли фотография ошибки

my-controller

impressionist actions: [:show], unique: [:impressionable_type, :impressionable_id, :session_hash]

если я удаляю : sission_ha sh мой проект запущен. но я не могу понять, сколько людей видят мою фотографию. не работает должным образом, только 1 человек показывает

shot.rb

is_impressionable

шоу. html .erb

<div class="column is-3 is-offset-1">
    <div class="nav panel show-shot-analytics">
        <div class="panel-block views data">
            <span class="icon"><i class="fa fa-eye"></i></span>
                <%= pluralize(@shot.impressionist_count, 'View') %>
        </div>
        <div class="panel-block comments data">
        <span class="icon"><i class="fa fa-comment"></i></span>
        <%= pluralize(@shot.comments.count, 'Comment') %>
 </div>

impression.rb

# Use this hook to configure impressionist parameters
#Impressionist.setup do |config|
  # Define ORM. Could be :active_record (default), :mongo_mapper or :mongoid
  # config.orm = :active_record
#end

Gemfile

gem 'impressionist', '~> 1.6'

Экран ошибки терминала

Started GET "/shots/7" for ::1 at 2020-03-31 03:15:20 +0300
Processing by ShotsController#show as HTML
  Parameters: {"id"=>"7"}
  Shot Load (0.4ms)  SELECT "shots".* FROM "shots" WHERE "shots"."id" = ? LIMIT ?  [["id", 7], ["LIMIT", 1]]
  ↳ app/controllers/shots_controller.rb:85:in `set_shot'
  User Load (0.3ms)  SELECT "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT ?  [["id", 3], ["LIMIT", 1]]
Completed 500 Internal Server Error in 20ms (ActiveRecord: 0.7ms | Allocations: 4748)
TypeError - TypeError:

Started POST "/__better_errors/3ae8964a5ff3f901/variables" for ::1 at 2020-03-31 03:15:20 +0300

снимок. js Javascrip документ

document.addEventListener("turbolinks:load", function(){

var Shots = {
    previewShot(){
        if (window.File && window.FileList && window.FileReader) {

            function handleFileSelect(evt){
                evt.stopPropagation();
                evt.preventDefault();

                let files = evt.target.files || evt.dataTransfer.files;

                for (var i =  0, f; f = files[i]; i++) {
                    if (!f.type.match('image.*')) {
                        continue;
                    }
                    const reader = new FileReader();

                    reader.onload = (function(theFile){
                        return function(e){
                            //Render thumbnail
                            let span = document.createElement('span');
                            span.innerHTML = ['<img class="thumb" src="', e.target.result,
                                    '" title="', escape(theFile.name), '"/>'
                                ].join('');
                            document.getElementById('list').insertBefore(span, null);
                        };

                    })(f);
                    reader.readAsDataURL(f);
                }
            }

            function handleDragOver(evt){
                evt.stopPropagation;
                evt.preventDefault;
                evt.dataTransfer.dropEffect = 'copy';
            }

                const dropZone = document.getElementById('drop_zone');
                const target = document.documentElement;
                const fileInput = document.getElementById('shot_user_shot');
                const previewImage = document.getElementById('previewImage');
                const newShotForm = document.getElementById('new_shot');

            if(dropZone){
                dropZone.addEventListener('dragover', handleDragOver, false);
                dropZone.addEventListener('drop', handleFileSelect, false);


            dropZone.addEventListener('dragover', (e) => {
                dropZone.classList.add('fire');
            },false);

            dropZone.addEventListener('dragleave', (e) => {
                dropZone.classList.remove('fire');
            }, false);

            dropZone.addEventListener('drop', (e)=>{
                e.preventDefault();
                dropZone.classList.remove('fire');
                fileInput.files = e.dataTransfer.files;
                //if on shot/id/edit hide preview image on drop
                if(previewImage){
                    previewImage.style.display = 'none';
                }
                if (newShotForm) {
                    dropZone.style.display = 'none';
                }
            }, false);
            // Body Specific
            target.addEventListener('dragover', (e)=> {
                e.preventDefault('dragging');
            }, false);
            // removes dragging class to body when not dragging
            target.addEventListener('dragleave', (e)=>{
                dropZone.classList.remove('dragging');
                dropZone.classList.remove('fire');
            }, false);

            }

        }
    },
            shotHover() {
                $('.shot').hover(function() {
                    $(this).children('.shot-data').toggleClass('visible');
                });
            }
    };
    Shots.previewShot();
    Shots.shotHover();

});
...