Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

rails4.2.8 からrails 5.1.0にUpgradeしたらformから送られてくるdateカラムの形式が変わってしまった

Q&A

Closed

rails4.2.8 からrails 5.1.0にUpgradeしたらformから送られてくるdateカラムの形式が変わってしまいました。
この変化のせいだと推測しているのですが、brithed_at カラムがvalidates :birthed_at, presence: trueに引っかかり保存できない状態です。
どのような対策が望ましいか助言いただきたいです。

profile_controller

 new     (params) ->    confirm    (params) ->        create
   ここはversion up前と同じ     ここが変わってしまった

rils4.2.8時のparameterの値
"birthed_at"=>"1955-05-05",
rils5.1.0時のparameterの値
 "birthed_at"=>"{1=>1988, 2=>8, 3=>8}"
views/confirm
.field
    /rails 4の場合 <input type="hidden" value="1997-06-30" name="examination_entry[profile][birthed_at]" id="examination_entry_profile_birthed_at">
    /rails 5の場合 <input type="hidden" value="{1=>1997, 2=>6, 3=>30}" name="examination_entry[profile][birthed_at]" id="examination_entry_profile_birthed_at">
    = uf.label :birthed_at
    = ld user.birthed_at
    = uf.hidden_field :birthed_at

gemfile
 source 'https://rubygems.org'

+ruby "2.7.4"
-ruby "2.5.3"

+gem 'rails', '5.0.1'
-gem 'rails', '4.2.8'

 gem 'clockwork'
+gem 'coffee-rails'
-gem 'coffee-rails', '~> 4.1.0'
 gem 'date_select_separator'
 gem 'default_value_for'
 gem 'devise'
 gem 'devise-i18n'
 gem 'enumerize'
 gem 'haml-rails'
 gem 'hamlit'
+gem 'jbuilder'
-gem 'jbuilder', '~> 2.0'
 gem 'jquery-rails'
 gem 'pg', '~> 0.18.2'
+gem 'config'
+gem 'rails_script', '~> 0.6.1'
-gem 'config', github: 'railsconfig/config'
-gem 'rails_script', '~> 0.6.1'
 gem 'restforce'
 gem 'salesforce_bulk_api'
+gem 'sass-rails'
+gem 'sdoc'
+gem 'turbolinks', '~> 2.5.3'
+gem 'uglifier'
-gem 'sass-rails', '~> 6'
-gem 'sdoc', '~> 0.4.0', group: :doc
-gem 'turbolinks', '~> 2.5.3'
-gem 'uglifier', '>= 1.3.0'
 gem 'valid_email'
 gem 'rinku'
 gem 'metamagic'

 group :development, :test do
   gem 'pry'
   gem 'pry-byebug'
   gem 'pry-rails'
-  gem 'quiet_assets'
   gem 'rspec'
   gem 'rspec-rails'
   gem 'spring'
 group :development, :test do
   gem 'thin'
   gem 'turnip'
   gem 'dotenv-rails'
+  gem 'rails-controller-testing'
 end

 group :development do
   gem 'letter_opener'
+  gem 'letter_opener_web'
+  gem 'web-console'
-  gem 'letter_opener_web', '~> 1.2.0'
-  gem 'web-console', '~> 2.0'
   gem 'better_errors'
   gem 'binding_of_caller'
+  gem "rails5-spec-converter"
 end

0

1Answer

多分railsって言うよりもgem 'date_select_separator'側じゃないかなと見ています。
普通に考えてdate型を{1=>1988, 2=>8, 3=>8}みたいに分解することはないはずなので。

該当controller内でbirthed_atは直接ログに出してみてどういうデータですか?

1Like

Comments

  1. @YusukeYamazaki

    Questioner

    コメントありがとうございます。
    - 該当controller内でbirthed_atは直接ログに出してみてどういうデータですか?

    "profile"=>{"last_name"=>"伊藤",
    "first_name"=>"祐輝",
    "last_name_kana"=>"イトウ",
    "first_name_kana"=>"ユウキ",
    "birthed_at"=>"{1=>1988, 2=>8, 3=>8}",
    "gender"=>"男性",
    "home_phone_number"=>"01234567",
    "home_postal_code_1"=>"999",
    "home_postal_code_2"=>"0622",
    "home_prefecture"=>"沖縄",
    "home_city"=>"那覇市",
    "home_street"=>"3条8丁目",
    "home_building"=>"",
    "company_name"=>"",
    "company_department"=>"",
    "company_business_type"=>"",
    "company_phone_number"=>"",
    "company_postal_code_1"=>"",
    "company_postal_code_2"=>"",
    "company_prefecture"=>"",
    "company_city"=>"",
    "company_street"=>"",
    "company_building"=>"",
    "company_code"=>"00000000",
    "fax"=>"",
    "title"=>"",
    "email_home"=>"",
    "email_office"=>"",
    "mobile_phone_office"=>"",
    "out_pmf_mail"=>"1",
    "material_destination"=>"自宅"}
    質問の返答として正しいか、自信がないので、間違っていたら教えて下さい。

    指摘されたgem 'date_select_separator'をGemfile.lockで確認したところ、railsのupgradeに伴い0.0.8 -> 0.0.9に変更されていました。
    試しに、gem 'date_select_separator'のversionを0.0.8に変更しても、症状は変わりませんでした。

    また、create action内にbinding.pryを挟みparameterのbirthed_atの値を直接"1988-08-08"のように書き換えてみましたが、結果エラーに変化がありませんでした。
    なので、おそらくこのエラーの原因は別にあると考えられます。

    せっかく、コメントくださったのに申し訳ありませんが、この質問はcloseにします。
  2. このログはform submitが起きた後のparamsの内容ですよね?

    そうではなくて、formを表示する時のactionで、birthed_atがどういう値なのか?ということをまずは確認したほうが良いと思います。

    それによってどの段階で普通の日付データがハッシュになっているのかが考えられるはずです。

Your answer might help someone💌