从变更集中获取必填字段和可选字段

Get required and optional fields from changeset

我在 Ecto.schema 中读到,我们可以通过这样做获得字段的 fieldstypes

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

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

有什么方法可以从变更集或模式函数中获取 @required_fields@optional_fields 吗?

谢谢

如果您想将必填字段和可选字段添加到您的 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 post 您似乎无法直接访问那些必填字段。一个建议是创建一个 return 这些字段的函数或宏:

更新

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

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