【问题标题】:Ecto Datetime Error during insert插入期间的 Ecto 日期时间错误
【发布时间】:2019-04-12 12:16:09
【问题描述】:

我正在尝试输入日期时间,因为 insert_all 不会自动添加 created_dates,我无法弄清楚我做错了什么。

currentTime = DateTime.utc_now

query = from rm in ChatApp.Roles.RoleMasters,
            join: srp in ChatApp.Servers.ServerTypeParameters,
            where: srp.parameter_role_capable_flag == "Y",
            select: %{role_master_id: rm.id, server_type_code: srp.server_type_code, parameter_namespace: srp.parameter_namespace, 
                      parameter: srp.parameter, parameter_value: srp.parameter_default_value, 
                      user_changeable_flag: "Y", description: srp.description, 
                      active_flag: "Y", created_date: ^currentTime}

roleMasterRows = ChatApp.Repo.all(query)


ChatApp.Repo.insert_all(ChatApp.Roles.RoleMasterParameters, roleMasterRows)

我的错误信息如下所示:

{{2017, 5, 10}, {20, 28, 42, 0}}ChatApp.Roles.RoleMasterParameters.created_dateinsert_all 中 不匹配类型:utc_datetime

在 ecto.schema 中,它将日期时间转换为元组,但我不知道为什么它不喜欢我的。

我被卡住了,我浏览了 Ecto.Schema 代码,它看起来需要元组,但我显然遗漏了一些东西,谢谢!

【问题讨论】:

  • 迁移和架构文件中的默认 timestamp() 调用不是 UTC。确保两者相同。 timestamps(type: :utc_datetime) 在迁移文件和架构文件中。
  • 我很欣赏这个评论,但我已经解决了这个问题!我没有使用 Ecto.Schema 类我已经编写了一个宏来更改 timestamps_opts 以更改类型。

标签: elixir phoenix-framework ecto


【解决方案1】:

我将把它留在这里,以防其他人遇到这个问题。

问题源于这样一个事实,因为查询是无模式的,并将 created_date 转换为 erlang 时间。使用:

^当前时间

当我在这里插入insert_all时:

ChatApp.Repo.insert_all(ChatApp.Roles.RoleMasterParameters, role_master_rows)

然后它尝试将 erlang 时间转换为 elixir 并在插入时失败。

这是我用来修复它的:

current_time = DateTime.utc_now

query = from rm in ChatApp.Roles.RoleMasters,
            join: srp in ChatApp.Servers.ServerTypeParameters,
            where: srp.parameter_role_capable_flag == "Y",
            select: %{role_master_id: rm.id, server_type_code: srp.server_type_code, parameter_namespace: srp.parameter_namespace, parameter: srp.parameter, parameter_value: srp.parameter_default_value, description: srp.description}

role_master_rows = query
  |> ChatApp.Repo.all
  |> Enum.map(&( Map.merge(&1, %{user_changeable_flag: "Y", active_flag: "Y", created_date: current_time})))


ChatApp.Repo.insert_all(ChatApp.Roles.RoleMasterParameters, role_master_rows)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-22
    • 2013-07-26
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    • 2015-03-17
    相关资源
    最近更新 更多