質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

889閲覧

Ruby on Rails:日付(date_select) の値が sessionに入らない。

frusciante

総合スコア8

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2020/02/06 23:18

編集2020/02/06 23:26

前提・実現したいこと

現在、Ruby on Rails でアプリ開発中ですが、sessionを使用したユーザー登録実装にて、日付(date_selectフォーム)の値がsessionに入らない状況です。

該当のソースコード

  • 該当hamlファイル

※下記記述の下の方にある「!= sprintf(f.date_select(:birthday, prefix:'birthday', 〜〜〜」が該当のdate_selectフォーム記述箇所です。

%h2 会員情報入力フォーム = form_for(@user, url: performance_path) do |f| = render "devise/shared/error_messages", resource: @user .name .name__title お名前(全角) .name__required 必須 = f.text_field :name, autofocus: true, autocomplete: "name", placeholder: "例)山田太郎" ,class: 'name-form' .name_kana .name_kana__title お名前カナ(全角) .name_kana__required 必須 = f.text_field :name_kana, autofocus: true, autocomplete: "name_kana", placeholder: "例)ヤマダタロウ" ,class: 'name_kana-form' .email .email__title メールアドレス .email__required 必須 = f.email_field :email, autocomplete: "email", placeholder: "PC・携帯どちらでも可" .password .password__title パスワード(半角英数字) .password__required 必須 = f.password_field :password, autocomplete: "new-password", placeholder: "6文字以上の半角英数字" .tel .tel__title 携帯電話の番号 .tel__required 必須 = f.text_field :tel, autofocus: true, autocomplete: "tel", placeholder: "携帯電話の番号を入力" .birthday .birthday__title 生年月日 .birthday__required 必須 .birthday__select-form != sprintf(f.date_select(:birthday, prefix:'user', with_css_classes:'XXXXX', prompt:"--", use_month_numbers:true, start_year:Time.now.year, end_year:1900, date_separator:'%s'),'年','月')+'日' .status .status__title 会員情報の公開設定 .status__required 必須 .status__select-form = f.select :status, User.statuses.keys, {promt: "---"} .actions = f.submit "次へ"
  • registrations_controller.rb
def new @user = User.new end def performance @user = User.new(sign_up_params) session["devise.regist_data"] = {user: @user.attributes} session["devise.regist_data"][:user]["name"] = params[:user][:name] session["devise.regist_data"][:user]["name_kana"] = params[:user][:name_kana] session["devise.regist_data"][:user]["email"] = params[:user][:email] session["devise.regist_data"][:user]["password"] = params[:user][:password] session["devise.regist_data"][:user]["tel"] = params[:user][:tel] session["devise.regist_data"][:user]["birthday"] = params[:user][:birthday] session["devise.regist_data"][:user]["status"] = params[:user][:status] # binding.pry @user = User.new(session["devise.regist_data"]["user"]) unless @user.valid? flash.now[:alert] = @user.errors.full_messages render :new and return end end

試したこと

registrations_controller.rb のsession記述の下に binding.pryを書きターミナルでsessionの中身を確認したところ日付(birthdayキー)の前後の値は取れているのですが、birthdayだけがnilになっています。
ターミナルのキャプチャリンク
※「prefectureキー」以下もnilになっていますが、現状の作業は「statusキー」までの入力なので、問題ありません。

開発環境

  • ruby 2.5.1
  • Rails 5.2.4.1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

こちら、application_controller.rbで定義していたストロングパラメーターを同ファイル内でbefore_actionで呼び出していなかったので、before_actionで追記したら解消しました。

  • application_controller.rb 修正後の記述
class ApplicationController < ActionController::Base before_action :configure_permitted_parameters, if: :devise_controller? protected def configure_permitted_parameters devise_parameter_sanitizer.permit(:sign_up, keys: [:name, :name_kana, :tel, :birthday, :status, :prefecture, :introduction, :performance, :portfolio]) end end

投稿2020/02/07 06:32

frusciante

総合スコア8

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問