从changeset获取必需和可选字段

时间:2018-02-13 09:10:19

标签: elixir ecto

我在Ecto.schema中读到,我们可以通过以下方式获取字段的fieldstypes

Model.__schema__(:fields)
Model__schema__(:types)

我有模块属性常量@required_fields@optional_fields

我们有什么方法可以从变更集或架构函数中获取@required_fields@optional_fields吗?

由于

1 个答案:

答案 0 :(得分:1)

如果您想在changeset cast功能中添加必填字段和可选字段,请执行以下操作:

  # using sigils list of words
  @required_fields ~w(field1 field2 field3)
  @optional_fields ~w()

  @doc """
  Builds a changeset based on the `struct` and `params`.
  """
  def changeset(struct, params \\ %{}) do
    struct
    |> cast(params, @required_fields, @optional_fields)
    |> cast_assoc(:message_details)
  end

从这个Elixir Forum帖子看来,您似乎无法直接访问这些必填字段。一个建议是创建一个返回这些字段的函数或宏:

<强>更新

def required_fields_for model do
  model.__ schema__(:fields)
  |> Enum.filter(fn field -> field in @required_fields end)
end

给定一个模型,这将返回必填字段。