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

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

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

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

Q&A

1回答

549閲覧

フォームで送ったデータがDBに保存されない

kyota.kaneshima

総合スコア0

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

0グッド

0クリップ

投稿2020/07/31 10:27

編集2020/07/31 11:56

前提・実現したいこと

お世話になります。
ドリンクのメニュー表のようなものにデータを追加したいのですが
newアクションのフォームからデータがDBに保存されないので保存されるようにしたいです。
エラー画面などは出ず、createアクションの投稿完了画面にも遷移されます。
他の質問者さんの回答を参考にしたりしましたが解決できません。
createアクションの定義も書き換えてを試しましたが結果は同じでした。

該当のソースコード

######コントローラー(drinks_controller.rb)パターン①

class DrinksController < ApplicationController def index @drinks = Drink.all end def new @drink = Drink.new end def create Drink.create(drink_params) end private def drink_params params.require(:drink).permit(:name, :price, :comment) end end

######コントローラー(drinks_controller.rb)パターン②

class DrinksController < ApplicationController def index @drinks = Drink.all end def new @drink = Drink.new end def create @drink = Drink.create(name: drink_params[:name], price: drink_params[:price], comment: drink_params[:comment]) end private def drink_params params.require(:drink).permit(:name, :price, :comment) end end

######ビューファイル(new.html.haml)

.container-fluid = form_with model: @drink, local: true do |f| .form-row .form-group.col-md-4 %h5 ドリンク名 = f.text_field :name, class: 'form-control', placeholder: '例:生ビール' .form-group.col-md-4 %h5 価格 = f.text_field :price, class: 'form-control', placeholder: '例:〇〇〇円' .form-group.col-md-4 %h5 コメント = f.text_field :comment, class: 'form-control', placeholder: '例:乾杯に' = f.submit '更新', class: '.btn .btn-primary'

###追記
######モデル(drink.rb)

class ApplicationRecord < ActiveRecord::Base self.abstract_class = true end

######モデル(application.record.rb)

class ApplicationRecord < ActiveRecord::Base self.abstract_class = true end

######マイグレーションファイル

class CreateDrinks < ActiveRecord::Migration[6.0] def change create_table :drinks do |t| t.string :name t.string :price t.string :comment t.timestamps end end end

試したこと

binding.pryでデータが送られているか確認しました
######ターミナル(createアクションでbinding.pry)

######ターミナル(ストロングパラメーターでbinding.pry) Started POST "/drinks" for ::1 at 2020-07-31 18:26:12 +0900 Processing by DrinksController#create as HTML Parameters: {"authenticity_token"=>"VAoRocMTjIxu0Gevi14AEd7xNI/gixhxsQMap7wqgEbquwRvw9RyHkux+4Wocsq1LYhQx2WmRDxcGH1F669pTA==", "drink"=>{"name"=>"熱燗", "price"=>"500円", "comment"=>"冬"}, "commit"=>"更新"} From: /Users/kyota/projects/oshinagaki2/app/controllers/drinks_controller.rb:13 DrinksController#create: 11: def create 12: Drink.create(drink_params) => 13: binding.pry 14: end [1] pry(#<DrinksController>)> params => <ActionController::Parameters {"authenticity_token"=>"VAoRocMTjIxu0Gevi14AEd7xNI/gixhxsQMap7wqgEbquwRvw9RyHkux+4Wocsq1LYhQx2WmRDxcGH1F669pTA==", "drink"=><ActionController::Parameters {"name"=>"熱燗", "price"=>"500円", "comment"=>"冬"} permitted: false>, "commit"=>"更新", "controller"=>"drinks", "action"=>"create"} permitted: false>

######ストロングパラメーターでbinding.pry

Started POST "/drinks" for ::1 at 2020-07-31 19:23:57 +0900 Processing by DrinksController#create as HTML Parameters: {"authenticity_token"=>"uoi7VtJErGi+dAdO1S06n8JWDhu4HhKie0Y+IGc2KmUEOa6Y0oNS+psVm2T2AfA7MS9qUz0zTu+WXVnCMLPDbw==", "drink"=>{"name"=>"熱燗", "price"=>"500円", "comment"=>"冬"}, "commit"=>"更新"} From: /Users/kyota/projects/oshinagaki2/app/controllers/drinks_controller.rb:18 DrinksController#drink_params: 16: def drink_params 17: params.require(:drink).permit(:name, :price, :comment) => 18: binding.pry 19: end [1] pry(#<DrinksController>)> params => <ActionController::Parameters {"authenticity_token"=>"uoi7VtJErGi+dAdO1S06n8JWDhu4HhKie0Y+IGc2KmUEOa6Y0oNS+psVm2T2AfA7MS9qUz0zTu+WXVnCMLPDbw==", "drink"=><ActionController::Parameters {"name"=>"熱燗", "price"=>"500円", "comment"=>"冬"} permitted: false>, "commit"=>"更新", "controller"=>"drinks", "action"=>"create"} permitted: false> [2] pry(#<DrinksController>)>

######ターミナル(binding.pryせずnewアクションを実行)

Started POST "/drinks" for ::1 at 2020-07-31 20:43:53 +0900 Processing by DrinksController#create as HTML Parameters: {"authenticity_token"=>"YyS7wjbf32ZE20LJX4EZrDJPQ7LntFQJs8EjEyFIinjdla4MNhgh9GG63uN8rdMIwTYn+mKZCERe2kTxds1jcg==", "drink"=>{"name"=>"熱燗", "price"=>"500円", "comment"=>"冬"}, "commit"=>"更新"} Rendering drinks/create.html.haml within layouts/application Rendered drinks/create.html.haml within layouts/application (Duration: 0.3ms | Allocations: 38) [Webpacker] Everything's up-to-date. Nothing to do Restaurant Load (0.5ms) SELECT `restaurants`.* FROM `restaurants` WHERE `restaurants`.`id` = 1 ORDER BY `restaurants`.`id` ASC LIMIT 1 ↳ app/views/layouts/application.html.haml:17 Completed 200 OK in 55ms (Views: 50.8ms | ActiveRecord: 0.5ms | Allocations: 32668)

初学者のため初歩的なミスかとは思うのですが、ご教授頂けますと幸いです。
宜しくお願い致します。

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

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

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

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

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

suama

2020/07/31 11:00

Started POST "/drinks" のあとに、ログは出ていませんか? うまく動いていたらSQLのINSERT... 文がログに出ていたりします。なにか条件が足りていないなら、その辺もログに出ます。 モデルも添えていただけるといいのでは。
kyota.kaneshima

2020/07/31 11:21

確認頂き誠にありがとうございます。 そんな中、大変恐縮なのですが、Started POST "/drinks" のあとはターミナルのブロックに記載してある通りの記述がされており(特に削除している部分はありません)、おそらくログのような物はでていないと思われます。見ている箇所が違いましたら誠に申し訳ございません。 ご指摘いただきました通り、記述少ないですがモデルの記述追加させていただきました。
suama

2020/07/31 11:31

binding.pryを無しにして、View (**.html.erb) が呼ばれて描画されるまでのログはどうでしょう? また、「500円」のところは文字列で入るのでしょうか?数字ではなくて? テーブルを作っているので、migrationファイルのほうはどうでしょう?
kyota.kaneshima

2020/07/31 11:58

度々、ありがとうございます。 priceの部分については、とりあえずという気持ちで文字列にしておりました。 ご指摘頂いたbiding.pryなしのログと マイグレーションファイルの記述を追加しました。 言われたことしかできず申し訳ないです。宜しくお願い致します。
guest

回答1

0

drinksテーブルに保存させたいのであれば、
drink.rbのself.abstract_class = trueはおそらく不要です!

追記
drink.rbのクラス名がApplicationRecordになっている点も気になりました。
掲載ミス?

投稿2020/07/31 20:40

編集2020/07/31 20:43
daihi

総合スコア35

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問