LoginSignup
2
1

More than 3 years have passed since last update.

date_selectで入力した日付がDBに保存されない!

Last updated at Posted at 2020-05-12

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'),'年 ','月 ')+'日'

スクリーンショット 2020-05-12 22.42.22.png

問題発生

実装したはいいが問題が発生した

選択した生年月日の数値がDBに保存されていないのだ

原因

色々調べた結果マイグレーションファイルに着目した

t.integer :birthday,  null: false

このデータ型のintegerが原因ではないかと考えた

integerとは整数だけを保存する型であり

date_selectで入力した数値は整数では保存されないのではと思い

以下のようにdate型にしたみた

t.date :birthday,  null: false

するとDBにしっかりと保存することができた

DBを確認

保存された内容をSequel Proで確認してみると
スクリーンショット 2020-05-12 23.42.36.png

上のように年-月-日となって保存されており

整数以外に記号"-"が入っているのが確認できる

これではinteger型で保存できないのは当然である

まとめ

date_selectで入力させるときはDBの方はdate型で保存させるようにしよう

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1