如何仅从ecto模型中获取字段?

时间:2016-09-21 15:15:49

标签: elixir ecto

假设我有一个模型,就像那样:

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

用户结构将由关联和字段表示,如:

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

如何基于此结构仅使用字段获取地图?

1 个答案:

答案 0 :(得分:10)

Ecto为模型定义__schema__函数。因此,您可以使用此函数获取字段:

fields = User.__schema__(:fields)

然后使用Map.take/2

Map.take(model, fields)