插入期间的 Ecto Datetime 错误
Ecto Datetime Error during insert
我正在尝试输入一个日期时间,因为 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)
我的错误信息是这样的:
value {{2017, 5, 10}, {20, 28, 42, 0}}
for
ChatApp.Roles.RoleMasterParameters.created_date
in insert_all
does
not match type :utc_datetime
在 ecto.schema 中,它将日期时间转换为元组,但我不知道为什么它不喜欢我的。
我被卡住了,我检查了 Ecto.Schema 代码,看起来它需要元组,但我显然遗漏了一些东西,谢谢!
我将把它留在这里以防其他人遇到这个问题。
问题源于这样一个事实,因为查询是无模式的,并将 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)
我正在尝试输入一个日期时间,因为 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)
我的错误信息是这样的:
value
{{2017, 5, 10}, {20, 28, 42, 0}}
forChatApp.Roles.RoleMasterParameters.created_date
ininsert_all
does not match type :utc_datetime
在 ecto.schema 中,它将日期时间转换为元组,但我不知道为什么它不喜欢我的。
我被卡住了,我检查了 Ecto.Schema 代码,看起来它需要元组,但我显然遗漏了一些东西,谢谢!
我将把它留在这里以防其他人遇到这个问题。
问题源于这样一个事实,因为查询是无模式的,并将 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)