Phoenix 앱에서 변경 사항 중 하나에 validate_format()
을 사용하여 선택적인 정수 값이 음수가 아닌지 확인했습니다. 그러나 메서드를 사용할 때 오류가 다시 발생하고 잘못된 작업을 수행할지 잘 모르겠습니다.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
과 같은 오류뿐만 아니라, 유효한 값 발생합니다.
이전에 문자열 필드에 validate_format()
을 사용했는데 잘 돌아갔습니다. 여기서 잘못하고있는 것을 말할 수는 없습니다. 누구든지이 기능을 처리하는 올바른 방법을 명확히 할 수 있습니까?
당신이 정수를 검증하기 위해 노력하고와'validate_format' 문자열입니다 때문입니다? validate_number, https://hexdocs.pm/ecto/Ecto.Changeset.html#validate_number/3 –
오, 이런, 물론 사용할 수 있습니다. 나는 그것을 완전히 놓쳤다. 대답으로 게시하면 확실하게 받아 들일 것입니다. – skwidbreth