date_selectで入力した日付がDBに保存されない!
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を確認
上のように年-月-日となって保存されており
整数以外に記号"-"が入っているのが確認できる
これではinteger型で保存できないのは当然である
まとめ
date_selectで入力させるときはDBの方はdate型で保存させるようにしよう
Author And Source
この問題について(date_selectで入力した日付がDBに保存されない!), 我々は、より多くの情報をここで見つけました https://qiita.com/massarian/items/79eed2b6721397e0866f著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .