🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Ruby on Rails 5

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

Q&A

解決済

1回答

987閲覧

RailsでParamsの中身をDBに保存できない

yuld

総合スコア2

Ruby on Rails 5

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

0グッド

0クリップ

投稿2021/01/27 06:12

編集2021/01/28 09:36

前提・実現したいこと

Railsで確認画面を表示するお問い合わせページを作成しています。
index(情報登録画面)→ confirm(内容確認画面)→ complete(送信完了画面)
という流れで実装しております。

この流れは正常に行くのですが、DBの中身がNULLになってしまいます。
原因が分からずつまづいてしまっているので、皆様のお力を頂戴したいです。

発生している問題・エラーメッセージ

confirm → completeに移動する際、DBに空で入ってしまいます。
データベース

rails c でコンソールから直接書き込もうとしてもNilになってしまいます。

該当のソースコード

/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 binding.pry #ここで一度処理を止めている 18 ContactMailer.received_email(@contact).deliver 19 if @contact.save 20 render :action => 'complete' 21 else 22 render :action => 'index' 23 end 24 end 25 26 private 27 def contact_params 28 params.require(:contact).permit(:name, :mail, :mail_confirmation, :message) 29 end 30end

/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 25

/view/confirm.html.haml

Haml

1.contactContents 2 .page-header 3 %h1 お問い合わせ 4 = form_for @contact, :url => contact_complete_path do |f| 5 %table.table 6 %tr 7 %th 名前 8 %td 9 = f.hidden_field :name 10 = @contact.name 11 %tr 12 %th メールアドレス 13 %td 14 = f.hidden_field :mail 15 = f.hidden_field :mail_confirmation 16 = @contact.mail 17 %tr 18 %th お問い合わせ内容 19 %td 20 = f.hidden_field :message 21 = simple_format(@contact.message) 22 = f.submit '送信', :class => 'btn btn-primary' 23

試したこと

binding.pryを試した場合

terminal

1 17: def complete 2 18: # メール送信 3 19: @contact = Contact.new(contact_params) 4 => 20: binding.pry 5 21: ContactMailer.received_email(@contact).deliver 6 22: if @contact.save 7 23: render :action => 'complete' 8 24: else 9 25: render :action => 'index' 10 26: end 11 27: end 12 13[1] pry(#<ContactController>)> @contact 14=> #<Contact:0x00007f9f97b3f310 id: nil, name: nil, mail: nil, mail_confirmation: nil, message: nil, created_at: nil, updated_at: nil> 15[2] pry(#<ContactController>)> contact_params 16=> <ActionController::Parameters {"name"=>"Taro", "mail"=>"test@sample.com", "mail_confirmation"=>"test@sample.com", "message"=>"hello world"} permitted: true> 17[3] pry(#<ContactController>)>

if contact.save! を試した場合

terminal

1Started GET "/contact" for ::1 at 2021-01-27 17:51:17 +0900 2Processing by ContactController#index as HTML 3 Rendering contact/index.html.haml within layouts/application 4 Rendered contact/index.html.haml within layouts/application (3.8ms) 5 Rendered layouts/_flash.html.haml (1.3ms) 6 Rendered layouts/_main_header.html.haml (6.7ms) 7 Rendered layouts/_session_controller.html.haml (2.2ms) 8 Rendered layouts/_main_footer.html.haml (5.7ms) 9Completed 200 OK in 218ms (Views: 206.9ms | ActiveRecord: 1.9ms) 10 11 12Started POST "/contact/confirm" for ::1 at 2021-01-27 17:51:33 +0900 13Processing by ContactController#confirm as HTML 14 Parameters: {"utf8"=>"✓", "authenticity_token"=>"1udTs/YkCfBWq5tGcPve+X0FY6x4tCrzj/1R+XL8xdZxjtGmE30n0Mx0krayDKHWBeddQLc4AntxF0XivHsq8g==", "contact"=>{"name"=>"test", "mail"=>"test@sample.com", "mail_confirmation"=>"test@sample.com", "message"=>"sample"}, "commit"=>"確認"} 15 Rendering contact/confirm.html.haml within layouts/application 16 Rendered contact/confirm.html.haml within layouts/application (3.2ms) 17 Rendered layouts/_flash.html.haml (1.3ms) 18 Rendered layouts/_main_header.html.haml (3.3ms) 19 Rendered layouts/_session_controller.html.haml (1.5ms) 20 Rendered layouts/_main_footer.html.haml (3.6ms) 21Completed 200 OK in 67ms (Views: 66.3ms | ActiveRecord: 0.0ms) 22 23 24Started POST "/contact/complete" for ::1 at 2021-01-27 17:51:35 +0900 25Processing by ContactController#complete as HTML 26 Parameters: {"utf8"=>"✓", "authenticity_token"=>"ACdr0CyeD2YCH6u8hwilPj6N6fXGWLyxL7rDl6vVnPinTunFycchRpjAokxF/9oRRm/XGQnUlDnRUNeMZVJz3A==", "contact"=>{"name"=>"test", "mail"=>"test@sample.com", "mail_confirmation"=>"test@sample.com", "message"=>"sample"}, "commit"=>"送信"} 27 Rendering contact_mailer/received_email.text.haml 28 Rendered contact_mailer/received_email.text.haml (1.1ms) 29ContactMailer#received_email: processed outbound mail in 9.7ms 30/usr/bin/open file:////Users/01018540/projects/reframe-lab/tmp/letter_opener/1611737495_265122_610c5dc/plain.html 31Sent mail to test@sample.com (6.5ms) 32Date: Wed, 27 Jan 2021 17:51:35 +0900 33From: example@example.com 34To: test@sample.com 35Message-ID: <6011299740a42_16a923fcfe39839cc381d9@CA6383.local.mail> 36Subject: =?UTF-8?Q?=E3=81=8A=E5=95=8F=E3=81=84=E5=90=88=E3=82=8F=E3=81=9B=E3=82=92=E6=89=BF=E3=82=8A=E3=81=BE=E3=81=97=E3=81=9F?= 37Mime-Version: 1.0 38Content-Type: text/plain; 39 charset=UTF-8 40Content-Transfer-Encoding: base64 41 42V2Vi44K144Kk44OI44GL44KJ44GK5ZWP44GE5ZCI44KP44Gb44GM44GC44KK 4344G+44GX44Gf44CCDQrllY/jgYTlkIjjgo/jgZvnlLvpnaLjgaflhaXlipvj 44gZXjgozjgZ/msI/lkI06IHRlc3QNCuWVj+OBhOWQiOOCj+OBm+eUu+mdouOB 45p+WFpeWKm+OBleOCjOOBn+ODoeODvOODq+OCouODieODrOOCuTogdGVzdEBz 46YW1wbGUuY29tDQrllY/jgYTlkIjjgo/jgZvlhoXlrrk6DQpzYW1wbGUNCg== 47 48 (0.2ms) BEGIN 49 ↳ app/controllers/contact_controller.rb:23 50 Contact Create (0.6ms) INSERT INTO `contacts` (`created_at`, `updated_at`) VALUES ('2021-01-27 08:51:35', '2021-01-27 08:51:35') 51 ↳ app/controllers/contact_controller.rb:23 52 (2.0ms) COMMIT 53 ↳ app/controllers/contact_controller.rb:23 54 Rendering contact/complete.html.haml within layouts/application 55 Rendered contact/complete.html.haml within layouts/application (1.9ms) 56 Rendered layouts/_flash.html.haml (1.0ms) 57 Rendered layouts/_main_header.html.haml (2.8ms) 58 Rendered layouts/_session_controller.html.haml (1.4ms) 59 Rendered layouts/_main_footer.html.haml (4.1ms) 60Completed 200 OK in 85ms (Views: 57.0ms | ActiveRecord: 2.8ms)

コンソールで直接追加を試行

rails

1$ bundle exec rails c 2Loading development environment (Rails 5.2.4.4) 3[1] pry(main)> 4[2] pry(main)> contact = 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, 16 updated_at: Thu, 28 Jan 2021 18:20:20 JST +09:00> 17[3] pry(main)>

補足情報(FW/ツールのバージョンなど)

versions

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ページで確認できます。

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

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

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

winterboum

2021/01/27 07:51

model Contact のcodeを載せてください。 どんなエラーなのか見たいので if @contact.save!  !をつけて実行してください
yuld

2021/01/27 08:53

winterboum様 ご確認いただきありがとうございます。 認識不足でしたら申し訳ございませんが、「/model/contact.rb」をすでに載せているのですがこちらではございませんでしょうか? > if @contact.save! !をつけて実行してください こちら実行しましても特にエラーなどは出ておりません。 正常に終了しているように見えますがDB上にデータが「NULL」で追加されております。。 「試したこと」にログを載せましたのでご確認ください。 (やはりDBに書き込みはできてないです。。。)
winterboum

2021/01/27 14:25

う〜〜〜む 理解不能なことが2件 binding.pryを試した場合PARAMSには値があるのに、modelには入っていない validationではnameとか必須なのに、データ無しでsaveしてエラーにならない
yuld

2021/01/28 12:21

他の質問の方でwinterboum様からご回答いただいたもので無事に解決しました! https://teratail.com/questions/319118 本当にありがとうございました!
guest

回答1

0

自己解決

他の質問の方でwinterboum様からご回答いただいたもので無事に解決しました!
https://teratail.com/questions/319118
本当にありがとうございました!

投稿2021/01/28 12:21

yuld

総合スコア2

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問