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。但无论如何,谢谢你的回答。:)您需要导入该特定函数才能使其工作