2015-10-16 8 views
8

Voglio definire un campo di tipo PostgreSQL-Hash nel mio modello Ecto, ma non sono sicuro di come farlo. Non ho trovato una guida esplicita su questo argomento e presumo che sia nascosto da qualche parte qui: http://hexdocs.pm/ecto/Ecto.Schema.htmlCome ottenere gli hash PostgreSQL nei modelli Ecto di Phoenix?

Qualcuno ha la guida definitiva per fare campi Hash di PostgreSQL in Ecto?

+0

Forse è necessario fornire un'implementazione 'Ecto.Type' per soddisfare le proprie esigenze? –

+0

Potrebbe essere. Qualcuno l'ha già fatto e vuole condividerlo? :-) Nel frattempo sperimenterò con questo. –

+0

C'è la sezione 'Il tipo di mappa' nella documentazione a cui hai allegato un link, hai provato ad usarlo? – JustMichael

risposta

4

Come ha dichiarato JustMichael, la risposta è il tipo :map.

La definizione della tabella:

CREATE TABLE public.authors (
    id INTEGER PRIMARY KEY NOT NULL DEFAULT nextval('authors_id_seq'::regclass), 
    settings HSTORE, 
    updated_at TIMESTAMP WITHOUT TIME ZONE, 
    inserted_at TIMESTAMP WITHOUT TIME ZONE 
); 

Il modello Ecto:

defmodule Nexus.Author do 
    use Nexus.Web, :model 

    schema "authors" do 
    field :settings, :map 
    timestamps 
    end 
end 

Ora posso ottenere accedere alle impostazioni Nexus.Repo.get(Author, some_id).settings e ottenere una mappa in cambio.