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

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

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

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

Q&A

解決済

1回答

837閲覧

Railsのコンソール上でデータを保存できない

yuld

総合スコア2

Ruby on Rails 5

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

0グッド

0クリップ

投稿2021/01/28 09:51

前提・実現したいこと

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

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

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

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

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

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

guest

回答1

0

ベストアンサー

ん?
`class Contact < ApplicationRecord
include ActiveModel::Model

attr_accessor :name, :mail, :mail_confirmation, :message
`
attr_accessor ですか?
db/schema.rb を確認してください。
table contacts に項目がないとかでは?

もしあるなら
` include ActiveModel::Model

attr_accessor :name, :mail, :mail_confirmation, :message
`
この2行削除

投稿2021/01/28 11:35

winterboum

総合スコア23567

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

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

yuld

2021/01/28 12:19

winterboum様 ` include ActiveModel::Model attr_accessor :name, :mail, :mail_confirmation, :message ` この2行削除で解決しました!!!もう一つの件もこちらが原因でした。。 本当にありがとうございました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問