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

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

新規登録して質問してみよう
ただいま回答率
85.35%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails

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

Q&A

解決済

1回答

996閲覧

mysqlにbirthdayが保存されない

topposan2zi

総合スコア5

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails

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

0グッド

0クリップ

投稿2020/07/25 06:01

ActiveRecord::NotNullViolation in SignupController#create
Mysql2::Error: Field 'birthday' doesn't have a default value
というエラーが出ました。

class SignupController < ApplicationController def step1 @user = User.new end def step2 session[:nickname] = user_params[:nickname] session[:email] = user_params[:email] session[:password] = user_params[:password] session[:password_confirmation] = user_params[:password_confirmation] session[:family_name] = user_params[:family_name] session[:first_name] = user_params[:first_name] session[:family_name_kana] = user_params[:family_name_kana] session[:first_name_kana] = user_params[:first_name_kana] session[:birthday] = user_params[:birthday] @user = User.new end def step3 session[:postal_code] = user_params[:postal_code] session[:prefecture] = user_params[:prefecture] session[:city] = user_params[:city] session[:address] = user_params[:address] session[:apartment] = user_params[:apartment] @user = User.new end def create @user = User.new( nickname: session[:nickname], email: session[:email], password: session[:password], password_confirmation: session[:password_confirmation], family_name: session[:family_name], first_name: session[:first_name], family_name_kana: session[:family_name_kana], first_name_kana: session[:first_name_kana], birthday: session[:birthday], postal_code: session[:postal_code], prefecture: session[:prefecture], city: session[:city], address: session[:address], apartment: session[:apartment], ) if @user.save session[:id] = @user.id redirect_to done_signup_index_path else render '/signup/registration' end end def done sign_in User.find(session[:id]) unless user_signed_in? end private def user_params params.require(:user).permit(:email, :password, :password_confirmation, :nickname, :family_name, :first_name, :family_name_kana, :first_name_kana, :birthday, :postal_code, :prefecture, :city, :address, :apartment) end end
class DeviseCreateUsers < ActiveRecord::Migration[6.0] def change create_table :users do |t| ## Database authenticatable t.string :email, null: false, default: "" t.string :encrypted_password, null: false, default: "" t.string :nickname, null: false t.string :user_image t.text :introduction t.string :first_name, null: false t.string :family_name, null: false t.string :first_name_kana, null: false t.string :family_name_kana, null: false t.date :birthday, null: false t.string :postal_code, null: false t.integer :prefecture, null: false t.string :city, null: false t.string :address, null: false t.string :apartment ## Recoverable t.string :reset_password_token t.datetime :reset_password_sent_at ## Rememberable t.datetime :remember_created_at ## Trackable # t.integer :sign_in_count, default: 0, null: false # t.datetime :current_sign_in_at # t.datetime :last_sign_in_at # t.string :current_sign_in_ip # t.string :last_sign_in_ip ## Confirmable # t.string :confirmation_token # t.datetime :confirmed_at # t.datetime :confirmation_sent_at # t.string :unconfirmed_email # Only if using reconfirmable ## Lockable # t.integer :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts # t.string :unlock_token # Only if unlock strategy is :email or :both # t.datetime :locked_at t.timestamps null: false end add_index :users, :email, unique: true add_index :users, :reset_password_token, unique: true # add_index :users, :confirmation_token, unique: true # add_index :users, :unlock_token, unique: true end end
= form_for @user, url: step2_signup_index_path, method: :get, html: {class: 'first-main__box'} do |f| = f.text_field :nickname, placeholder: '例) ニックネーム' = f.email_field :email, placeholder: 'メールアドレス' = f.password_field :password, placeholder: '7文字以上' = f.password_field :password_confirmation, placeholder: '7文字以上' = f.text_field :family_name, placeholder: '例) 田中' = f.text_field :first_name, placeholder: '例) 太郎' = f.text_field :family_name_kana, placeholder: '例) タナカ' = f.text_field :first_name_kana, placeholder: '例) タロウ' = f.date_select :birthday, use_month_numbers: true,start_year: 1930, end_year: (Time.now.year - 10), default: Date.new(1989, 1, 1) = f.submit "住所の入力へ進む"
= form_for @user, url: signup_index_path, method: :post, html: {class: 'forth-main-wrapper__box'} do |f| = f.text_field :postal_code, placeholder: '郵便番号' = f.collection_select :prefecture, JpPrefecture::Prefecture.all, :code, :name = f.text_field :city, placeholder: '市町村' = f.text_field :address, placeholder: '番地' = f.text_field :apartment, placeholder: 'ビル名、アパート名' = f.submit "登録する"

調べてもpermitを使いましょうというのばかりですでに使っているのでどこを直せばいいかわからない状態です、、
よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

deviceに「birthdayも取り込んでくれ」という指示ができていないです。
こんなの入れてください。

application_controller.rb class ApplicationController < ActionController::Base protect_from_forgery with: :exception before_action :configure_permitted_parameters, if: :devise_controller? protected def configure_permitted_parameters added_attrs = [ :email, :birthday, :password, :password_confirmation ] devise_parameter_sanitizer.permit :sign_up, keys: added_attrs devise_parameter_sanitizer.permit :account_update, keys: added_attrs devise_parameter_sanitizer.permit :sign_in, keys: added_attrs end end

投稿2020/07/25 06:46

winterboum

総合スコア23567

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

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

topposan2zi

2020/07/25 10:02

回答ありがとうございます! 記入しrails sをしてやり直したのですが、同じエラー文が出てきます。。
winterboum

2020/07/25 11:21

よく見ると、user登録の画面に birthday が見当たりませんが?
topposan2zi

2020/07/25 12:51

= f.date_select :birthday, use_month_numbers: true,start_year: 1930, end_year: (Time.now.year - 10), default: Date.new(1989, 1, 1) こちらではbirthdayの登録できないのでしょうか?
winterboum

2020/07/25 23:35

あ、見落としてました。
winterboum

2020/07/25 23:38

createのところで`nickname: session[:nickname],` というような記述が多数有りますが、sessionはいつどのように値を入れていますか?
winterboum

2020/07/25 23:40

あと t.string :email, null: false, default: "" t.string :encrypted_password, null: false, default: "" も不可解ですね、、、、
topposan2zi

2020/07/26 01:19

すみません、sessionの所はQiitaの記事を読みながらやったので詳しくはわからないです、、 t.string :email, null: false, default: "" t.string :encrypted_password, null: false, default: "" この二つはrails g devise user をしたときに自動で生成されてます。
topposan2zi

2020/07/26 02:12

今試してみたのですが、ウィザード形式にせず、 deviseの新規登録ページ一つで完結するようにすると、 全て登録はできています。
winterboum

2020/07/26 03:16

一度で全部、でよければそれで行きましょう。 分けたい場合、 createに来た時はまだsessionには何も入っていないはずなので、全部空でuserのsaveが行われた、tableの定義でemailとpasswordはdefaultが設定されているから通ったがbirthdayで引っかかっt、ということです。 createのところはsessionを使わずに params.require(:user).permit( ここに項目名列挙) でnewしましょう
topposan2zi

2020/07/26 13:22

あれから色々試してみて、rails g devise:controllerをしてaddressテーブルを作ったりなどしていたら、ウィザード形式でうまく登録することができました! 事細かに教えていただいたこともあり無事搭載できました! ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問