데이터베이스에서 날짜/시간 유형을로드 할 때 Ecto는 Ecto.DateTime 유형으로 캐스팅합니다. 변경 집합이 사용타입 캐스트 JSON을 데이터베이스에서 온 것처럼 디코딩
Ecto.Changeset.cast Poison.decode!(data), %Rocket.User{},
~w(required_fields), ~w(optional_fields)
: 당신이 체외 0.6.0을 사용하는 경우 JSON 문자열
defmodule Rocket.User do
use Rocket.Model
schema "users" do
field :created_at, :datetime
field :name, :string
field :email, :string
field :password, :string
field :timezone, :string
end
end
iex(40)> Poison.decode!(~s({"created_at":"2015-01-21T06:05:10.891Z"}), as: Rocket.User)
%Rocket.User{created_at: "2015-01-21T06:05:10.891Z", email: nil, id: nil,
name: nil, password: nil, timezone: nil}
사용자 정의 유형에 대한 링크 덕분에 데이터를 신뢰할 수있는 경우 여전히이 방법을 사용하는 것이 좋습니다. 이 경우 JSON은 모델을 직렬화/비 직렬화하여 다른 언어의 프로그램이 데이터와 함께 작동 할 수 있도록 사용됩니다. – Krut
데이터가 신뢰할 수있는 경우에도 두 방법으로 모두 작동합니다. :) 그럼 너 괜찮아. –
이것은 여전히 유효합니다. 캐스트는 리턴 값으로 변경 모드를 적용해야합니다. 값 비싼 Ecto.Changeset.cast (Poison.decode! (data), % Rocket.User {}, ~ w (required_fields) , ~ w (optional_fields)) |> Ecto.Changeset.apply_changes' – Krut