Stack Level Zu tiefer Fehler für Google Maps

Oct 02 2020

Ich habe diesen Stack-Level-Fehler zu tief bekommen und bin mir nicht sicher, woher er kommt. Hier ist der Fehler:

Ich verwende die Javascript-API von Google Maps, um Elemente anzuzeigen. Hier ist das Modell:

 class Item < ApplicationRecord
  belongs_to :user
  has_one_attached :photo

  validates :price, presence: true, if: :available_for_rent?
  #address validations
  validates :street, presence: true
  validates :city, presence: true
  validates :state, presence: true
  validates :zip, presence: true

  scope :rentable, -> { where(available_for_rent: true) }

  #google maps
  geocoded_by :address
  after_validation :geocode

  def address
    [street, city, zip, state].compact.join(", ")
  end

  #validate size of photo uploads
  validate :photo_validation
  def photo_validation
    if photo.attached?
      if photo.blob.byte_size > 3000000
        photo.purge
        errors[:base] << 'The file uploaded was too big. Jubal Talents only allows photo uploads under 3 MB.'
      elsif !photo.blob.content_type.starts_with?('image/')
        photo.purge
        errors[:base] << 'Wrong format. Please ensure file is jpg or png.'
      end
    end
  end
  
end

Hier ist das HTML, in dem der Fehler ausgelöst wird:

  <div class="column">
      <%= tag.div nil, id:'map', data: {items: @items.to_json(methods: [:address])}%>
      <div class="notification">
        <p class="title is-6">Addresses are not exact. You must contact the owner to recieve a pickup address.</p>
      </div>
  </div>
</div>

und hier ist das Javascript:

document.addEventListener("turbolinks:load", function() {
    var map = new GMaps({
        div: '#map',
        lat: 38.5816,
        lng: -121.4944
      });
      window.map = map;

      var items = JSON.parse(document.querySelector("#map").dataset.items);
      window.items = items;

      var bounds = new google.maps.LatLngBounds();

      items.forEach(function(item) {
        if (item.latitude && item.longitude) {
            var marker = map.addMarker({
                lat: (item.latitude - Math.random()*.1),
                lng: (item.longitude - Math.random()*.1),
                title: item.address,
                infoWindow: {
                    content: `<p><a href="/items/${item.id}">${item.name}</a></p>`
                }
            })
        bounds.extend(marker.position);
        }
      });
    map.fitBounds(bounds);

});

Ich bin mir ziemlich sicher, dass der Fehler vom Modell kommt, aber ich bin immer noch etwas neu in allem. Jede Hilfe wäre sehr dankbar! :) :)

Antworten

MalachiBowman Oct 02 2020 at 01:51

Es stellt sich heraus, dass die Methode "to_json" das Problem verursacht hat.

Die Hauptursache für dieses Problem war in meinem Fall ein Feld mit demselben Namen in meinem Modell (Spalte in der Tabelle) wie der Anhang, das nicht benötigt wird, da Active Storage separate Tabellen verwendet. Und wenn to_json für ein solches Modellobjekt aufgerufen wird, verursacht dies einen zu tiefen Fehler auf Stapelebene. Nach dem Entfernen der Spalte aus der Datenbank verschwindet das Problem.

Dieser Beitrag hat meinem Problem wirklich geholfen