插入

时间:2017-05-10 21:14:49

标签: elixir phoenix-framework ecto

我正在尝试输入日期时间,因为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_date中的insert_all确实如此   不匹配类型:utc_datetime

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

我被困了我经历了Ecto.Schema代码,看起来它想要元组,但我显然遗漏了一些东西,谢谢!

1 个答案:

答案 0 :(得分:2)

如果有其他人遇到这个问题,我会留下这个。

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

  

^ currentTime的

当我在这里进行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)