Elixir 凤凰城-**(ArgumentError)无法识别的时间#<;日期时间(2021-12-31T23:59:00Z)>;
我在我的项目中使用Timex.DateTime处理datetimes&到目前为止,它完成了这项工作 但是,我尝试为Phoenix.HTML.Form创建一个自定义生成器,用于编辑datetimeElixir 凤凰城-**(ArgumentError)无法识别的时间#<;日期时间(2021-12-31T23:59:00Z)>;,elixir,phoenix-framework,Elixir,Phoenix Framework,我在我的项目中使用Timex.DateTime处理datetimes&到目前为止,它完成了这项工作 但是,我尝试为Phoenix.HTML.Form创建一个自定义生成器,用于编辑datetimepublish\u date以下内容: %> 时间::: 日期:// 我从输出中了解到,我使用不同的类型,但我不知道如何转换它们,我仍在学习Phoenix,因此,如果您有更好的方法解决此问题,也会很有用 堆栈跟踪: Request: HEAD /news/12/edit ** (
publish\u date
以下内容:
%>
时间:::
日期://
我从输出中了解到,我使用不同的类型,但我不知道如何转换它们,我仍在学习Phoenix,因此,如果您有更好的方法解决此问题,也会很有用
堆栈跟踪:
Request: HEAD /news/12/edit
** (exit) an exception was raised:
** (ArgumentError) unrecognized time #<DateTime(2021-12-31T23:59:00Z)>
(phoenix_html) lib/phoenix_html/form.ex:966: Phoenix.HTML.Form.time_value/1
(phoenix_html) lib/phoenix_html/form.ex:895: Phoenix.HTML.Form.datetime_select/3
(estrada) web/templates/news_article/form.html.eex:41: anonymous fn/2 in Estrada.NewsArticleView.form.html/1
(phoenix_html) lib/phoenix_html/form.ex:235: Phoenix.HTML.Form.form_for/4
(estrada) web/templates/news_article/form.html.eex:1: Estrada.NewsArticleView."form.html"/1
(estrada) web/templates/news_article/edit.html.eex:3: Estrada.NewsArticleView."edit.html"/1
(estrada) web/templates/layout/app.html.eex:48: Estrada.LayoutView."app.html"/1
(phoenix) lib/phoenix/view.ex:344: Phoenix.View.render_to_iodata/3
(phoenix) lib/phoenix/controller.ex:633: Phoenix.Controller.do_render/4
(estrada) web/controllers/news_article_controller.ex:1: Estrada.NewsArticleController.action/2
(estrada) web/controllers/news_article_controller.ex:1: Estrada.NewsArticleController.phoenix_controller_pipeline/2
(estrada) lib/phoenix/router.ex:261: Estrada.Router.dispatch/2
(estrada) web/router.ex:1: Estrada.Router.do_call/2
(estrada) lib/estrada/endpoint.ex:1: Estrada.Endpoint.phoenix_pipeline/1
(estrada) lib/plug/debugger.ex:93: Estrada.Endpoint."call (overridable 3)"/2
(estrada) lib/phoenix/endpoint/render_errors.ex:34: Estrada.Endpoint.call/2
(plug) lib/plug/adapters/cowboy/handler.ex:15: Plug.Adapters.Cowboy.Handler.upgrade/4
(cowboy) src/cowboy_protocol.erl:442: :cowboy_protocol.execute/4
请求:HEAD/news/12/edit
**(退出)引发了一个异常:
**(ArgumentError)无法识别的时间#
(phoenix_html)lib/phoenix_html/form.ex:966:phoenix.html.form.time_value/1
(phoenix_html)lib/phoenix_html/form.ex:895:phoenix.html.form.datetime_select/3
(estrada)web/templates/news_article/form.html.eex:41:enonymous fn/2在estrada.newsactionview.form.html/1中
(phoenix_html)lib/phoenix_html/form.ex:235:phoenix.html.form.form_for/4
(estrada)web/templates/news_article/form.html.eex:1:estrada.newsactionview.“form.html”/1
(estrada)web/templates/news_article/edit.html.eex:3:estrada.newsactionview.“edit.html”/1
(estrada)web/templates/layout/app.html.eex:48:estrada.LayoutView.“app.html”/1
(phoenix)lib/phoenix/view.ex:344:phoenix.view.render_to_iodata/3
(phoenix)lib/phoenix/controller.ex:633:phoenix.controller.do_render/4
(estrada)web/controllers/news\u article\u controller.ex:1:estrada.newsactioncontroller.action/2
(estrada)web/controllers/news\u article\u controller.ex:1:estrada.newsactioncontroller.phoenix\u controller\u pipeline/2
(estrada)lib/phoenix/router.ex:261:estrada.router.dispatch/2
(estrada)web/router.ex:1:estrada.router.do_call/2
(estrada)lib/estrada/endpoint.ex:1:estrada.endpoint.phoenix_管道/1
(estrada)lib/plug/debugger.ex:93:estrada.Endpoint.“调用(可重写3)”/2
(estrada)lib/phoenix/endpoint/render_errors.ex:34:estrada.endpoint.call/2
(plug)lib/plug/adapters/cowboy/handler.ex:15:plug.adapters.cowboy.handler.upgrade/4
(cowboy)src/cowboy_protocol.erl:442::cowboy_protocol.execute/4
编辑:当我用它创建一篇新文章时,这个表单工作得很好,只有当我用它编辑一篇文章时它才会崩溃,也就是说,当表单向服务器提交数据时它才会工作,只有当我填充datetime字段时才会发生这种情况。问题是
datetime\u select
只支持,和Timex.DateTime
与它们中的任何一个都不匹配
您可以手动将Timex.DateTime
转换为支持的格式并传递:
替换
<%= datetime_select f, :publish_date, class: "form-control", builder: fn b -> %>
%>
与
%>
(记住用实际型号替换型号
。)
当Elixir 1.3发布后,phoenix_html和timex的未来版本希望不需要此解决方法。看看时间(2021年12月31日晚上11:59),我猜可能您没有正确地从数据库中获取字段。不,我正在获取字段,输入数据是正确的。非常感谢,只是为了完成填充模型的部分,我不知道怎么做,应该是
f.data.publish\u date
…&另外,如果其他人试图实现此功能,则必须对字段f.data.publish\u date
执行空检查,因为如果将表单与new
一起使用,则模型的对象将为空。
<%= datetime_select f, :publish_date, class: "form-control", builder: fn b -> %>
<%= datetime_select f, :publish_date, value: Timex.to_erlang_datetime(model.publish_date), class: "form-control", builder: fn b -> %>