#date_selectとは?
生年月日を入力してもらう際、ユーザーに直接入力してもらうのではなく
選択式で入力してもらうようにしたい場合
date_selectというものを使う
.member-main__form
= f.label '生年月日', {class: 'member-main__form--label'}
%span.member-main__form--require 必須
%p.member-main__form--select
!= sprintf(f.date_select(:birthday, require:true,with_css_classes:'XXXXX', prompt:"--",use_month_numbers:true, start_year:Time.now.year, end_year:1900, date_separator:'%s'),'年 ','月 ')+'日'
#問題発生
実装したはいいが問題が発生した
選択した生年月日の数値がDBに保存されていないのだ
#原因
色々調べた結果マイグレーションファイルに着目した
t.integer :birthday, null: false
このデータ型のintegerが原因ではないかと考えた
integerとは整数だけを保存する型であり
date_selectで入力した数値は整数では保存されないのではと思い
以下のようにdate型にしたみた
t.date :birthday, null: false
するとDBにしっかりと保存することができた
#DBを確認
保存された内容をSequel Proで確認してみると
上のように年-月-日となって保存されており
整数以外に記号"-"が入っているのが確認できる
これではinteger型で保存できないのは当然である
まとめ
date_selectで入力させるときはDBの方はdate型で保存させるようにしよう