2016-09-21 2 views
2

Lassen Sie sagen, ich ein Modell haben, wie folgt aus:Wie kann ich nur Felder aus dem Ecto-Modell holen?

defmodule User do 
    use MyApp.Web, :model 

    schema "users" do 
    field :email, :string 
    field :first_name, :string 

    belongs_to :role, Role 
    has_many :comments, Comment 
    end 
end 

Benutzer Struktur wird von beiden Verbänden und Felder dargestellt werden, wie folgt aus:

model = %User{ 
    __meta__: #Ecto.Schema.Metadata<:loaded, "users">, 
    comments: #Ecto.Association.NotLoaded, 
    email: "[email protected]", 
    first_name: "alex", 
    role: #Ecto.Association.NotLoaded 
} 

Wie kann ich auf diese Struktur Karte erhalten basierend mit Felder nur?

Antwort

3

Ecto definiert __schema__ Funktion für Modelle. So können Sie Felder holen Sie diese Funktion verwenden:

fields = User.__schema__(:fields) 

Und dann verwenden Map.take/2

Map.take(model, fields) 
Verwandte Themen