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

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

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

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

Ruby on Rails

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

Q&A

解決済

1回答

623閲覧

form_forのデータがテーブルにに保存されない

kabigon

総合スコア3

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2020/05/15 09:24

編集2020/05/15 09:31

form_forを使用し非表示のフォームを作成したのですがモデルに保存できなくて困っています。
binding.pryをしたところcreateアクションにparamsでデータが送られてきていることは確認できています。

####ターミナル↓
19: def create
=> 20: binding.pry
21: UserFood.create(user_food_params)
22: redirect_to root_path
23: end

[1] pry(#<OrdersController>)> params
=> <ActionController::Parameters {"utf8"=>"✓", "authenticity_token"=>"oEWDCU7hgArdapqijWBEwMF9hJJ2pAIQQBL7Pqnh68BW1sPDs7kxLY2aV4Mx56Rzo3qNsJAy7ZKQCq963ah5WQ==", "user_food"=>{"food"=>"りんご", "price"=>"400", "quantity"=>"1"}, "commit"=>"1", "controller"=>"orders", "action"=>"create"} permitted: false>
[2] pry(#<OrdersController>)> user_food_params
=> <ActionController::Parameters {"food"=>"りんご", "price"=>"400", "quantity"=>"1"} permitted: true>
[3] pry(#<OrdersController>)>

###controller

class OrdersController < ApplicationController def index @user_food= UserFood.new if @user_food.save else end @user_foods = UserFood.all price = UserFood.sum(:price) quantity = UserFood.sum(:quantity) @total = ((price * quantity)/2) end def new end def create UserFood.create(user_food_params) redirect_to root_path end def destroy order = UserFood.find(params[:id]) order.destroy redirect_to root_path end private def user_food_params params.require(:user_food).permit(:food, :price, :quantity) end end

###index.html.haml

.number-box__row #1.number-box__row--btn = form_for(@user_food, url: orders_path ) do |f| = f.hidden_field :food, value: "りんご" = f.hidden_field :price, value: 400 = f.hidden_field :quantity, value: 1 = f.submit "1", class: "btn"

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

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

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

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

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

winterboum

2020/05/15 09:37

その部分のlogを見たいです 及び、 user_food = UserFood.create(user_food_params) として、user_food.errors.messages を見るとsaveできなかった原因がわかります
kabigon

2020/05/15 09:43

``` Started POST "/orders" for ::1 at 2020-05-15 18:32:17 +0900 Processing by OrdersController#create as HTML Parameters: {"utf8"=>"✓", "authenticity_token"=>"WNG1ep+naczPasz8hCTI5g8uooKz1Bmw+W+gbrdC3WSuQvWwYv/Y65+aAd04oyhVbSmroFVC9jIpd/QqwwtP/Q==", "user_food"=>{"food"=>"りんご", "price"=>"400", "quantity"=>"1"}, "commit"=>"1"}  (0.1ms) BEGIN  (0.2ms) ROLLBACK Redirected to http://localhost:3000/ Completed 302 Found in 13320ms (ActiveRecord: 0.3ms) Started GET "/" for ::1 at 2020-05-15 18:32:30 +0900 Processing by OrdersController#index as HTML  (0.1ms) BEGIN  (0.2ms) ROLLBACK  (0.2ms) SELECT SUM(`user_foods`.`price`) FROM `user_foods`  (0.1ms) SELECT SUM(`user_foods`.`quantity`) FROM `user_foods` Rendering orders/index.html.haml within layouts/application Rendered orders/_menu_index.html.haml (17.8ms) UserFood Load (0.3ms) SELECT `user_foods`.* FROM `user_foods` Rendered orders/index.html.haml within layouts/application (29.1ms) Completed 200 OK in 68ms (Views: 52.5ms | ActiveRecord: 0.9ms) ``` すみませんuser_food.errors.messagesはどのようにしたら見れるのでしょうか...
winterboum

2020/05/15 09:49

ああ、binding.pry してください
kabigon

2020/05/15 10:07

Started POST "/orders" for ::1 at 2020-05-15 19:04:26 +0900 Processing by OrdersController#create as HTML Parameters: {"utf8"=>"✓", "authenticity_token"=>"JUgMAyyz31VIytCOjlzOhG+7JDLvS6yRWdMkGFv0vzDT20zJ0etuchg6Ha8y2y43DbwtEAndQxOJy3BcL70tqQ==", "user_food"=>{"food"=>"りんご", "price"=>"400", "quantity"=>"1"}, "commit"=>"1"} From: /Users/ryonukiyama/order/app/controllers/orders_controller.rb:20 OrdersController#create: 19: def create => 20: binding.pry 21: UserFood.create(user_food_params) 22: redirect_to root_path 23: end 失礼しました、、 こちらがbinding.pryをかけた時のログになります。
winterboum

2020/05/15 21:25

ですから、 UserFood.create(user_food_params) を user_food = UserFood.create(user_food_params) にして、 user_food.errors.messages を見てください
kabigon

2020/05/16 02:08

すみません、、 このような感じで良いでしょうか 19: def create => 20: binding.pry 21: user_food = UserFood.create(user_food_params) 22: redirect_to root_path 23: end [1] pry(#<OrdersController>)> user_food.errors.messages NoMethodError: undefined method `errors' for nil:NilClass from (pry):14:in `create'
winterboum

2020/05/16 03:16

21を実行してから user_food.errors.messages を見ていただかないと
kabigon

2020/05/16 03:50

後から機能追加しようとしていて外部キーの蘭を作っていたんですけど、 migrateからそのカラムを無くしたら無事保存することができました;;ありがとうございます。
guest

回答1

0

自己解決

不要なカラムを無くしたら無事保存できました。

投稿2020/05/16 03:53

kabigon

総合スコア3

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問