不推荐使用更新版本的 Elixir 进行 Ecto.DateTime 转换

问题描述 投票:0回答:1

我有一个旧版本的 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
的最佳方法是什么?

elixir ecto
1个回答
0
投票

您应该将架构中的

inserted_at
定义更改为
:naive_datetime
,然后您应该能够删除对
Ecto.DateTime.cast()
的调用,因为Ecto会自动将其转换为
NaiveDateTime

您也可以使用

:utc_datetime
来获得
DateTime
,但与您现有的代码相比,这将是行为上的变化。

© www.soinside.com 2019 - 2024. All rights reserved.