Stack Level Zu tiefer Fehler für Google Maps
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
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