2017-11-08 6 views
1

私のPhoenixアプリケーションでは、オプションの整数値が負でないことを確認するために、変更セットの1つに​​を使用しようとしています。しかし、このメソッドを使用するとエラーが戻ってきます。何が間違っているのか分かりません。ここでPhoenix/Elixir - 整数のための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 

を、同じエラーも、有効な値で生じます。

以前は文字列フィールドに​​を使用しましたが、うまくいきました。ここで間違っていることはわかりません。誰でもこの機能を処理する正しい方法を明確にすることはできますか?

+3

あなたが整数を検証しようとしていると 'validate_format'が文字列のためであるためですか?あなたはvalidate_number、https://hexdocs.pm/ecto/Ecto.Changeset.html#validate_number/3を使用することができます –

+0

ああもちろん私のゴシック。私はそれを完全に逃した。それを回答として投稿すれば、私は確かにそれを受け入れるだろう。 – skwidbreth

答えて

1

私は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 
関連する問題