Ich habe einige Code in einem meiner Controller wiederholt, die ich in einer Schleife konsolidieren möchte, aber ich kann keine klare Anweisung finden, wie dies zu tun ist, da dies ein einzigartiges scheint Anwendungsfall für gmaps4rails. Ich habe versucht, ein Array von Instanzvariablen zu erstellen, aber es schien nicht zu funktionieren! Der Code Ich mag würde konsolidieren:Instanz Variable Schleife in der Steuerung
stores_controller.rb ->
class StoresController < ApplicationController
def map
@rep1 = Store.where(:user_id => "1")
@rep2 = Store.where(:user_id => "10")
@rep3 = Store.where(:user_id => "11")
@rep4 = Store.where(:user_id => "12")
@rep5 = Store.where(:user_id => "13")
@rep6 = Store.where(:user_id => "14")
@rep7 = Store.where(:user_id => "15")
@rep8 = Store.where(:user_id => "16")
@rep9 = Store.where(:user_id => "17")
@repA = Store.where(:user_id => "18")
@hash1 = Gmaps4rails.build_markers(@rep1) do |store, marker|
marker.lat store.lat
marker.lng store.long
marker.title store.name
marker.infowindow "#{store.store_infowindow}"
marker.picture({
:url => "//chart.apis.google.com/chart?chst=d_map_pin_letter&chld=TP|81DF08|000000",
:width => 52,
:height => 32
})
end
@hash2 = Gmaps4rails.build_markers(@rep2) do |store, marker|
marker.lat store.lat
marker.lng store.long
marker.title store.name
marker.infowindow "#{store.store_infowindow}"
marker.picture({
:url => "//chart.apis.google.com/chart?chst=d_map_pin_letter&chld=BS|267AD2|D9E1FF",
:width => 52,
:height => 32
})
end
@hash3 = etc, etc, etc...
Ich werde auch den Marker-Loader von meiner Karte JS in der Ansichtsdatei für eine gute Maßnahme umfassen,
map.html.erb ->
markers = handler.addMarkers(<%=raw @hash1.to_json %>), handler.addMarkers(<%=raw @hash2.to_json %>),
handler.addMarkers(<%=raw @hash3.to_json %>), handler.addMarkers(<%=raw @hash3.to_json %>),
handler.addMarkers(<%=raw @hash4.to_json %>), handler.addMarkers(<%=raw @hash5.to_json %>),
handler.addMarkers(<%=raw @hash6.to_json %>), handler.addMarkers(<%=raw @hash7.to_json %>),
handler.addMarkers(<%=raw @hash8.to_json %>), handler.addMarkers(<%=raw @hash9.to_json %>),
handler.addMarkers(<%=raw @hashA.to_json %>);
Die gmaps4rails Marker Gebäude @hash Variablen weiterhin ihre einzelnen Schleifen durch alle 10 Wiederholungen über diesen ersten beiden hier angedeutet. Die einzigen zwei Variablen innerhalb dieser Hashes sind der Aufruf 'build_markers (@ rep #)' und der Aufruf 'chld = TP | 81DF08 | 000000', der die Initialen und die Farbe des Markers für jeden Benutzer anzeigt. Ich bin ein Anfänger, also könnte ich das alles von Anfang an falsch machen! Jeder Rat wird geschätzt. Vielen Dank!
EDIT ->
Mein konsolidierter Code, der wie das Hinzufügen eines „Marker“ -Spalte zu meiner Benutzertabelle so einfach endete als da dies die einzige hartcodiert war Variable, die Veränderung benötigt, in der Form von '# {store.user.marker}' in der URL Markierung auf der Karte:
stores_controller.rb ->
def map
@stores = Store.all
@hash = Gmaps4rails.build_markers(@stores) do |store, marker|
marker.lat store.lat
marker.lng store.long
marker.title store.name
marker.infowindow "#{store.store_infowindow}"
marker.picture({
:url => "//chart.apis.google.com/chart?chst=d_map_pin_letter&chld=#{store.user.marker}",
:width => 52, :height => 32
})
end
respond_to do |format|
format.html
format.json { render json: @hash }
end
end
Das Codieren von IDs in Ihren Code ist ein wirklich schlechter Code-Geruch. Dies bedeutet, dass Sie den Code nicht testen können, da die IDs nacheinander von der Datenbank erstellt werden. Stattdessen sollten Sie darüber nachdenken, welche Ressourcen verfügbar sein sollten und eine sinnvolle Möglichkeit, sie zu filtern. – max
Diese Methode begrenzt leider die Farben des Markers, da ich für jeden Benutzer dynamische Markerfarben auf der Karte haben muss. –
Sie sollten den Benutzer mit 'store.user' erreichen können - Sie können die Farben in der Tabelle Benutzer speichern. Was Sie tun, ist nicht wirklich eine machbare Möglichkeit, um Apps zu bauen ... – max