前提・実現したいこと
DBに正常にデータを格納したいです。
原因が分からず2日ほどつまづいてしまっているので、皆様のお力を頂戴したいです。
発生している問題・エラーメッセージ
RailsでContactモデルを作成し、コンソールでデータの保存を試しているのですが全ての値がnilで入ってしまいます。
terminal
1$ bundle exec rails c 2Loading development environment (Rails 5.2.4.4) 3[1] pry(main)> 4[2] pry(main)> Contact.create(name:"Taro", mail:"test@gmail.com", mail_confirmation: "test@gmail.com", message: "hello world") 5 (0.4ms) SET NAMES utf8, @@SESSION.sql_mode = CONCAT(CONCAT(@@sql_mode, ',STRICT_ALL_TABLES'), ',NO_AUTO_VALUE_ON_ZERO'), @@SESSION.sql_auto_is_null = 0, @@SESSION.wait_timeout = 2147483 6 (0.1ms) BEGIN 7 Contact Create (0.3ms) INSERT INTO `contacts` (`created_at`, `updated_at`) VALUES ('2021-01-28 09:20:20', '2021-01-28 09:20:20') 8 (0.6ms) COMMIT 9=> #<Contact:0x00007fb75bc29f10 10 id: 24, 11 name: nil, 12 mail: nil, 13 mail_confirmation: nil, 14 message: nil, 15 created_at: Thu, 28 Jan 2021 18:20:20 JST +09:00,
該当のソースコード
/model/contact.rb
Ruby
1class Contact < ApplicationRecord 2 include ActiveModel::Model 3 4 attr_accessor :name, :mail, :mail_confirmation, :message 5 6 validates :name, 7 presence: {:message => '名前を入力してください'} 8 9 VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+.[a-z]+\z/i 10 11 validates :mail, 12 length: {maximum: 255}, 13 presence: {:message => 'メールアドレスを入力してください'}, 14 format: { with: VALID_EMAIL_REGEX } 15 16 validates_confirmation_of :mail, 17 length: {maximum: 255}, 18 presence: {:message => 'メールアドレスを入力してください'}, 19 format: { with: VALID_EMAIL_REGEX } 20 21 validates :message, 22 length: {maximum: 255} 23 24end
/controller/contact_controller.rb
Ruby
1class ContactController < ApplicationController 2 def index 3 @contact = Contact.new 4 render :action => 'index' 5 end 6 def confirm 7 @contact = Contact.new(contact_params) 8 if @contact.valid? 9 render :action => 'confirm' 10 else 11 render :action => 'index' 12 end 13 end 14 15 def complete 16 @contact = Contact.new(contact_params) 17 ContactMailer.received_email(@contact).deliver 18 if @contact.save 19 render :action => 'complete' 20 else 21 render :action => 'index' 22 end 23 end 24 25 private 26 def contact_params 27 params.require(:contact).permit(:name, :mail, :mail_confirmation, :message) 28 end 29end
あまり関係ないかもしれませんがdatabase.ymlも共有いたします。
database.yml
yml
1default: &default 2 adapter: mysql2 3 encoding: utf8 4 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> 5 username: root 6 password: password 7 socket: /tmp/mysql.sock 8 9development: 10 <<: *default 11 database: test_app_development 12 13production: 14 adapter: mysql2 15 encoding: utf8 16 database: test_app_production 17 username: root 18 password: password 19 socket: /var/lib/mysql/mysql.sock 20
試したこと
create!を試行
terminal
1[3] pry(main)> Contact.create!(name:"Taro", mail:"test@gmail.com", mail_confirmation: "test@gmail.com", message: "hello world") (0.2ms) BEGIN 2 Contact Create (0.3ms) INSERT INTO `contacts` (`created_at`, `updated_at`) VALUES ('2021-01-28 09:23:31', '2021-01-28 09:23:31') 3 (0.7ms) COMMIT 4=> #<Contact:0x00007fb75bdc3f38 5 id: 25, 6 name: nil, 7 mail: nil, 8 mail_confirmation: nil, 9 message: nil, 10 created_at: Thu, 28 Jan 2021 18:23:31 JST +09:00, 11 updated_at: Thu, 28 Jan 2021 18:23:31 JST +09:00>
補足情報(FW/ツールのバージョンなど)
version
1ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin19] 2rails 5.2.4.4 3mysql Ver 14.14 Distrib 5.7.32, for osx10.15 (x86_64) using EditLine wrapper
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/28 12:19