Elixir 日期“在表格中选择失败,带”号&书信电报;字段>;“无效”;

Elixir 日期“在表格中选择失败,带”号&书信电报;字段>;“无效”;,elixir,phoenix-framework,ecto,Elixir,Phoenix Framework,Ecto,我有这个模板 <div class="form-group"> <label>Insurance Expiry : </label> <%= date_select f, :insurance_expiry, class: "form-control" %> </div> 在db模型中 schema "buses" do # snipped field :insurance_expiry, :date end

我有这个模板

<div class="form-group">
  <label>Insurance Expiry : </label>
  <%= date_select f, :insurance_expiry, class: "form-control" %>
</div>
在db模型中

 schema "buses" do

 # snipped

   field :insurance_expiry, :date

 end
创建操作的调试信息

[info] Processing by BusMan.BusController.create/2
  Parameters: %{"_csrf_token" => "PDkIZycHTRJsEzwOEBJRXxo6MVIFJgAAHla/FI4Y5PQxTYdk/XakNg==", "_utf8" => "✓", "bus" => %{"bus_no" => "138", "chassis_no" => "nTHSNTH", "engine_no" => "RCHR989", "insurance_expiry" => %{"day" => "1", "month" => "10", "year" => "2019"}, "models" => "NTHRCG898", "reg_no" => "TN21W0613", "year_of_registration" => "1990"}, "format" => "html"}
表格提交失败,原因如下:

Oops, something went wrong! Please check the errors below:

    Insurance expiry is invalid
我只想输入一个日期,是
date\u select
是我需要的还是我遗漏了什么

更正后,使用
exto.Date
而不是
:Date
正确地解决了问题,并且不需要显式强制转换


看起来传递给create函数的日期是一个映射。在插入之前,请尝试使用

exto.Date.cast(%%{“day”=>“1”、“month”=>“10”、“year”=>“2019”})

我可以想象这样的代码

selected_date = %{"day" => "1", "month" => "10", "year" => "2019"}
  |> Ecto.Date.cast
  |> Repo.insert!

insurance\u expiration\u map=bus\u params[“insurance\u expiration”]{:好的,insurance\u expiration\u date}=exto.date.cast(insurance\u expiration\u map)updated\u bus\u params=%{bus\u params}“insurance\u expiration”=>insurance\u expiration\u date changeset=bus.changeset(%bus{},updated\u bus\u params)
我还将模式中的
:date
类型更改为custom
exto.date
。就是这样:)您不需要显式地强制转换它。错误是您使用了
:date
,而不是
exto.date
。我将很快提出更好的错误。
selected_date = %{"day" => "1", "month" => "10", "year" => "2019"}
  |> Ecto.Date.cast
  |> Repo.insert!