我有一个旧版本的 Elixir 代码,它使用
Ecto.DateTime.cast()
。然而,自从 Ecto 3.x 发布以来,Ecto.DateTime
已被弃用。我有以下代码,我想知道如何转换到最新版本。
架构
inserted_at
返回~N[2019-01-11 09:55:34]
代码:
{:ok, inserted_at} = media.inserted_at |> Ecto.DateTime.cast()
返回警告,我认为是时候更改这个已弃用的代码了。
错误
warning: Ecto.DateTime.cast/1 is undefined (module Ecto.DateTime is not available or is yet to be defined)
warning: Ecto.Date.cast/1 is undefined (module Ecto.Date is not available or is yet to be defined)
我还有另一个函数,它也使用 Date 并且也返回警告。
def parse_media_date(params, key) do
case params[key] |> Timex.parse("{YYYY}-{0M}-{0D}") do
{:ok, date} ->
{:ok, date} = Ecto.Date.cast(date)
%{params | key => date}
{:error, _reason} ->
params
end
end
由于 Elixir 的
DateTime
没有 cast()
功能,将此代码更改为当前版本的 DateTime
的最佳方法是什么?
您应该将架构中的
inserted_at
定义更改为:naive_datetime
,然后您应该能够删除对Ecto.DateTime.cast()
的调用,因为Ecto会自动将其转换为NaiveDateTime
。
您也可以使用
:utc_datetime
来获得 DateTime
,但与您现有的代码相比,这将是行为上的变化。