从变更集中获取必填字段和可选字段
Get required and optional fields from changeset
我在 Ecto.schema
中读到,我们可以通过这样做获得字段的 fields
和 types
:
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 必填字段。
我在 Ecto.schema
中读到,我们可以通过这样做获得字段的 fields
和 types
:
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 必填字段。