2017-01-03 5 views
0

これは、from要素からカスタム日付を作成しています。私は人の誕生日と月を収集するフォームを持っています(私は年に興味がありません)。私は私のモデルでは複数のフォーム要素からElixir Ectoデータを作成します。

<div class="form-group"> 
    <div class="row"> 
      <div class="col-md-5">Day/Month of Birth</div> 
      <%= date_select f, :day_and_month_of_birth, builder: fn b -> %> 
      <div class="col-md-3"> 
      <%= b.(:day, []) %> 
      </div> 
      /
      <div class="col-md-4"> 
      <%= b.(:month, []) %> 
      </div> 
      <% end %> 
      <%= error_tag f, :day_and_month_of_birth %> 
    </div> 
</div> 

::私はフォームを投稿するとき

defmodule RocfDev.Registration do 
    use RocfDev.Web, :model 

schema "registration" do 
    field :title, :string, virtual: true 
    field :firstname, :string, virtual: true 
    field :surname, :string, virtual: true 
    field :day_and_month_of_birth, Ecto.Date, virtual: true 
end 

def changeset(model, params \\ %{}) do 
    model 
    |> cast(params, [ 
     :title, 
     :firstname, 
     :surname, 
     :day_and_month_of_birth 
    ]) 
end 

現在、私が取得するので、私はこの記事を約あるday_and_month_of_birth要素のためのフォームのエントリを作成するには、以下を使用しますエラーunrecognized date %{"day" => "1", "month" => "1"}

registrationスキーマには、dayフィールドとmonthフィールドがないためだと思います。私の質問は次のとおりです

私は生年に興味がないので、Ecto.Dateはまだday_and_month_of_birthフィールドに使用するのに適したタイプですか?

第2に、どうすればエラーを解決できますか?

答えて

0

基本的には、2つの整数範囲1..121..31があります。しかし、ペアには数多くの制限/制約があります。230は無効です。そのため、ここではタイプがまだ適用されています。それを使用するには、年を強制的に、たとえば、2000とし、この値をフロントエンドに渡し、隠しフィールドを使用してそれを「表示」して戻すことがあります。あなたはunrecognized dateのエラーについて気にすることができませんでした:今からあなたは%{"year" => 2000, "day" => "1", "month" => "1"}をここで得るでしょう。

一方、ちょうどの閏年が存在するため、曜日と月の値は日付を確認するための不完全な情報です。年を知らずに、February, 29が有効な生年月日であるかどうかを証明することはできません。 2016/2/29は有効ですが、2017/2/29は有効ではありません。このような観点から、Ecto.Dateを悪用するのを止めて、2つの範囲フィールド(どちらも整数型)を使用することは合理的です。

関連する問題