前提・実現したいこと
お世話になります。
ドリンクのメニュー表のようなものにデータを追加したいのですが
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)
初学者のため初歩的なミスかとは思うのですが、ご教授頂けますと幸いです。
宜しくお願い致します。