elixir - Phoenix/Elixir - validate_format() 整数失败

标签 elixir phoenix-framework ecto

在我的 Phoenix 应用程序中,我尝试在我的一个变更集上使用 validate_format() 以确保可选整数值不为负(如果已提供)。但是,我在使用该方法时遇到错误,我不确定自己做错了什么。

这是我的架构和变更集 - 因为 :duration 已经被定义为一个整数,所以我真的只关心确保它不包含减号:

embedded_schema do
  field :content, :string
  field :title, :string
  field :duration, :integer

  timestamps()
end

def changeset(struct, params \\ %{}) do
  struct
  |> cast(params, [:id, :content, :title, :duration])
  |> validate_length(:title, max: 99, message: "Title must be less than 100 characters.")
  |> validate_format(:duration, ~r/[^-]\d+/)
end

例如,如果我尝试提交 -1 的值,则会返回错误:

** (FunctionClauseError) no function clause matching in Kernel.=~/2
    (elixir) lib/kernel.ex:1629: Kernel.=~(-1, ~r/[^-]\d+/)
    (ecto) lib/ecto/changeset.ex:1357: anonymous fn/5 in Ecto.Changeset.validate_format/4

同样的错误也会发生在有效值上。

我以前在字符串字段上使用过 validate_format() 并且它工作得很好 - 我不知道我在这里做错了什么。谁能阐明处理此功能的正确方法?

最佳答案

我相信 validate_format 是另一个用例。对于您的特定问题,我会使用 validate_number 例如:

def changeset(struct, params \\ %{}) do
  struct
  |> cast(params, [:id, :content, :title, :duration])
  |> validate_length(:title, max: 99, message: "Title must be less than 100 characters.")
  |> validate_number(:duration, greater_than: 0)
end

关于elixir - Phoenix/Elixir - validate_format() 整数失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47190875/

相关文章:

elixir - Cron 任务量子 Elixir

elixir - 如何为 phoenix 框架项目加载环境变量

elixir - 如何键入转换解码JSON,就好像它来自数据库一样

elixir - 三分之一需要validate_required

elixir - Phoenix channel 的广播如何影响其他节点上的客户端?

elixir - 无法在匹配: Foreach loop中调用远程功能

elixir - 某些 sql 查询已退出 DBConnection.ConnectionError PID(XXX)

data-structures - Phoenix 1.3 (Elixir) 错误 : Myapp. Users.User.__struct__/0 未定义,无法扩展 struct Myapp.Users.User

postgresql - Elixir Ecto - PostgreSQL jsonb 函数

concurrency - Erlang的rpc的区别:multicall/4 vs rpc:pmap/3