2017-02-01 4 views
1

У меня есть следующая модель. Должен ли я включать все имена полей в листинг или есть ли способ по умолчанию для сопоставления всех полей в параметрах для модели.литье/3 в Elixir Ecto изменения

defmodule Chemical.Info do 
    use Chemical.Web, :model 

    schema "infos" do 
     field :title, :string 
     field :shortdesc, :string 
     field :longdesc, :string 
     field :images, :string 
     field :regions, :string 
     field :startdate, :date 
     field :enddate, :date 
     field :status, :string 
     field :createdby, :string 
     field :approvedby, :string 

     timestamps() 
    end 

    def changeset(model, params \\ :empty) do 
     model 
     |> cast(params, ["title", "shortdesc", "longdesc"]) 
    end 
end 

Должен ли я указывать все имена полей в методе литья, которые нужно скопировать в модель?

ответ

1

Я думаю, что это может работать, но я никогда не делал этого ТБМ ->

Enum.map(@ecto_fields, &(elem(&1, 0))) 
+1

Он должен работать для всех не-виртуальных полей. – PatNowak

+0

Я заменил это |> cast (params, ["title", "shortdesc", "longdesc"]) с этим |> cast (params, Enum.map (@ecto_fields, & (elem (& 1, 0)))) и это сработало. благодаря –