我尝试做的是传递一个空字符串作为字段的值,并验证它是否为nil。问题是validate_required在nil和空值时都会引发错误。如何使它接受空值?
纲要
schema "messages" do
field :user_id, :string
field :text, :string
timestamps()
end
变更集
def changeset(struct, params \\ %{}) do
struct
|> cast(params, [:text, :user_id])
|> validate_required([:text, :user_id])
end
2条答案
按热度按时间but5z9lq1#
不幸的是,
validate_required
的行为是硬编码的,它认为空字符串和只有空格的字符串都是缺失的。该函数遍历每个字段,为值为
nil
的每个字段添加错误。bxjv4tth2#
https://github.com/elixir-ecto/ecto/issues/1684
即使这不能解决您的问题,在定义中添加一个默认值也可以让您创建一个完全避免空值的 * 解决方法 *,即使它不是您想要的。