Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir 从变更集中获取必填字段和可选字段_Elixir_Ecto - Fatal编程技术网

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

Elixir 从变更集中获取必填字段和可选字段,elixir,ecto,Elixir,Ecto,我在exto.schema中读到,通过这样做,我们可以得到字段和类型: Model.__schema__(:fields) Model__schema__(:types) 我有模块属性常量@必填字段和@可选字段 我们有没有办法从变更集或模式函数中获取@必填字段和@可选字段 如果要将必填字段和可选字段添加到变更集转换函数,请多谢: # using sigils list of words @required_fields ~w(field1 field2 field3) @optio

我在
exto.schema
中读到,通过这样做,我们可以得到
字段
类型

Model.__schema__(:fields)
Model__schema__(:types)
我有模块属性常量
@必填字段
@可选字段

我们有没有办法从变更集或模式函数中获取
@必填字段
@可选字段


如果要将必填字段和可选字段添加到
变更集
转换
函数,请多谢:

  # 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
从这篇文章看来,你似乎无法直接访问这些必填字段。建议创建一个返回以下字段的函数或宏:

更新

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

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

这里的必填字段和可选字段是什么意思?该字段可以是虚拟的/非虚拟的,但我看不到任何方法可以在架构定义中使字段成为必需的和可选的。@Dogbert让我向您展示架构。我说的是什么是属性?我在Ecto的文档中没有看到它。如果您只是想避免变更集中的代码重复,您可以将它们声明为模块属性
@required\u fields[…]
@Dogbert我在变更集中设置了
@required\u fields
。我只想将它们作为数组或列表获取。我们是否通过变更集函数获取它们。您认为这是可能的吗?我已经添加了必填字段。我的问题是如何通过一些函数获取必填字段和可选字段,但为此,我必须对必填字段进行硬编码,然后通过Ecto对其进行过滤。我希望它们根据给定的模型动态获取。好吧,必填_字段本质上是硬编码到应用程序中的,因为它们实际上不受应用程序代码的更改。但我明白你的意思。让我更新我的答案。无法在模块外部访问模块属性常量。在上面的代码中,它将返回nil。但无论如何,谢谢你的回答。:)您需要导入该特定函数才能使其工作