2017-12-21 3 views
0

Ich versuche CRUD zu meiner Admin-Schnittstelle hinzuzufügen. Mein Schema sieht wie folgt aus:ExAdmin - Eingabe für verschachtelte Daten hinzufügen

schema "tree" do 
    field :name, :string 
    field :metadata, :map 
    field :created_at, Ecto.DateTime 
    field :updated_at, Ecto.DateTime 
end 

und meine Form sieht derzeit wie folgt aus:

{ 
    "metadata": { 
     "index": 1, 
     "info": { 
      "text": "Some random text" 
     }, 
     "icon": "icon_1", 
     "data_points": [ 
      { 
       "default": { 
        "name": "Default" 
       } 
      }, 
      { 
       "other": { 
        "name": "Other" 
       } 
      } 
     ] 
    } 
} 

bisher zu bearbeiten oben- Ich bin in der Lage:

form framework_tree do 
    inputs do 
    input tree, :name 
    end 
    inputs "Metadata" do 
    input tree, :metadata, schema: [icon: :string, index: :integer, title: :string] 
    end 
end 

Metadaten wie folgt aussieht level Metadaten-Strings und Ganzzahlen. Aber ich würde gerne info.text sowie das Array von data_points bearbeiten. Kann ich diese zum Array schema im Formular hinzufügen? Oder gibt es eine andere Möglichkeit, diese Daten einfach zu bearbeiten?

Antwort

1

Dies ist ein perfektes usecase für die Ecto.Schema.embedded_schema/1:

defmodule Tree do 
    use Ecto.Schema 

    schema "tree" do 
    field :name, :string 
    embeds_one :metadata, Metadata 
    field :created_at, Ecto.DateTime 
    field :updated_at, Ecto.DateTime 
    end 
end 

defmodule Metadata do 
    use Ecto.Schema 

    embedded_schema do 
    field :index 
    field :info 
    field :icon 
    embeds_many :datapoints, Datapoint 
    end 
end 

defmodule Datapoint do 
... 
end 
Verwandte Themen