Raz*_*nar 3 erlang elixir changeset ecto phoenix-framework
我要做的是将一个空字符串作为字段的值传递,并验证它是否为nil.问题是validate_required会在nil和空值上引发错误.如何让它接受空白值?
模式
schema "messages" do
field :user_id, :string
field :text, :string
timestamps()
end
Run Code Online (Sandbox Code Playgroud)
变更
def changeset(struct, params \\ %{}) do
struct
|> cast(params, [:text, :user_id])
|> validate_required([:text, :user_id])
end
Run Code Online (Sandbox Code Playgroud)
validate_required遗憾的是,行为被硬编码为空的以及只有空格的字符串.但是,您可以编写一个简单的函数来进行验证:
def changeset(struct, params \\ %{}) do
struct
|> cast(params, [:text, :user_id])
|> validate_not_nil([:text, :user_id])
end
def validate_not_nil(changeset, fields) do
Enum.reduce(fields, changeset, fn field, changeset ->
if get_field(changeset, field) == nil do
add_error(changeset, field, "nil")
else
changeset
end
end)
end
Run Code Online (Sandbox Code Playgroud)
该函数遍历每个字段,为每个具有值的字段添加错误nil.
| 归档时间: |
|
| 查看次数: |
1327 次 |
| 最近记录: |