/ / Wie wird Array in einem Schritt mit Hash verglichen und in die Model-Instanz-Methode eingefügt? - Elixier, Phönix-Framework

Wie kann Array in einem Schritt mit Hash verglichen und in die Model-Instanz-Methode eingefügt werden? - Elixier, Phönix-Framework

Wie man umwandelt Geo.Point Koordinatenattribut enthält %Geo.Point{coordinates: {49.44, 17.87}, srid: nil} nach Geo.JSON.encode: %{"coordinates" => [49.44, 17.87], "type" => "Point"} Zur folgenden Formel:

%{latitude: latitude, longitude: longitude}

Dies ist meine derzeitige Methode, wie man es in einem Schritt macht?

%{"coordinates" => [latitude,longitude] } = Geo.JSON.encode(place.coordinates)
coordinates = %{latitude: latitude, longitude: longitude}

Wie man es in die Instanzmethode einfügt, so dass es nach einem Anruf z.B. eine neue Formel zurückgibt place.to_lat_lng?

defmodule MyApp.Place do
use MyApp.Web, :model

schema "place" do
field :coordinates, Geo.Point

timestamps
end
def to_lat_lng do
#...format coordinates
end
end

Antworten:

1 für die Antwort № 1

Sie müssen nicht JSON encodieren. Sie können den Geo.Point als Argument an eine Funktion übergeben. Ich würde etwas tun wie:

  def to_lat_lng(%Geo.Point{coordinates: {lat, long}}) do
%{latitude: lat, longitude: long}
end

Bitte beachten Sie, dass dies keine Instanzmethode ist. Es ist einfach eine Funktion. einige andere Terminologie Dinge, die Sie wissen sollten, wie es Ihnen mit der Dokumentation helfen kann: Im Elixier haben wir eine Liste, kein Array. Wir benutzen auch eine Karte oder ein Diktat http://elixir-lang.org/getting-started/maps-and-dicts.html