我在Ecto.schema
中读到,我们可以通过以下方式获取字段的fields
和types
:
Model.__schema__(:fields)
Model__schema__(:types)
我有模块属性常量@required_fields
和@optional_fields
。
我们有什么方法可以从变更集或架构函数中获取@required_fields
和@optional_fields
吗?
由于
答案 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
给定一个模型,这将返回必填字段。