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

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

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

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

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

1回答

2671閲覧

railsでupdateでうまくparams が保存されない

murakamixi

総合スコア7

Ruby

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

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2020/02/26 16:29

編集2020/02/26 16:40

前提・実現したいこと

編集フォームで入力した内容をDBに保存したいです。(該当レコードを更新したい)

ここに質問の内容を詳しく書いてください。
Ruby on Railsでフォームの編集機能の実装中に、下記のようなエラーに遭遇しました。
@supplier_car.updateの中身がからであるということなのですが、paramsをbinding.pryで確認したところ、一番初めのbinding.pryの部分まではparamsに期待しているデータがきているので、updateへの受け渡しの記述が間違っているのかと思っているのですが、自己解決できずに質問させていただきます。

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

以下のような、エラーメッセージが出てきています。

イメージ説明

該当のソースコード

controller

ruby

1def new 2 @supplier_car = SupplierCar.new 3 end 4 5 def create 6 @supplier_car = SupplierCar.new(supplier_car_params) 7 @supplier_car.supplier_id = supplier_id 8 @supplier_car.save 9 redirect_to supplier_home_path(supplier_id) 10 end 11 12 def edit 13 # whereは使えない 14 @supplier_car = find_by_supplier_id 15 binding.pry 16 end 17 18 def update 19 @supplier_car = SupplierCar.find_by(supplier_id: params[:id]) 20 binding.pry 21 if @supplier_car.update(supplier_car_params) 22 binding.pry 23 redirect_to supplier_home_path(supplier_id) 24 else 25 render :edit 26 end 27 end 28 29 private 30 def supplier_car_params 31 params.require(:supplier_car).permit(:supplier_id,:car_name, :car_color, :area, :classify_num, :hiragana, :designate_num) 32 end 33 34 def supplier_id 35 @supplier_id = current_supplier.id 36 end 37 38 def find_by_supplier_id 39 SupplierCar.find_by(supplier_id: params[:id]) 40 end

View

haml

1=form_for @supplier_car, html: {class: 'h-100 d-flex align-items-center bg-dark'} do |f| 2 .container.col-12.bg-dark 3 .container.col-md-7.col-xs-12 4 .h2 5 .field.form-group 6 =f.label :car_name, class:'h5 text-white' 7 %br/ 8 =f.text_field :car_name, class: 'form-control' 9 .field.form-group 10 =f.label :car_color, class:'h5 text-white' 11 %br/ 12 =f.text_field :car_color, class: 'form-control' 13 .field.form-group 14 =f.label :area, class:'h5 text-white' 15 %br/ 16 =f.text_field :area, class: 'form-control' 17 .field.form-group 18 =f.label :classify_num, class:'h5 text-white' 19 %br/ 20 =f.text_field :classify_num, class: 'form-control' 21 .field.form-group 22 =f.label :hiragana, class:'h5 text-white' 23 %br/ 24 =f.text_field :hiragana, class: 'form-control' 25 .field.form-group 26 =f.label :designate_num, class:'h5 text-white' 27 %br/ 28 =f.text_field :designate_num, class: 'form-control' 29 .actions 30 =f.submit 'send', class: 'btn-primary btn-lg'

試したこと

params内の確認をまずしました。前述しましたが、Viewでの入力が、コントローラーまできていることは確認済みです。
if以降の部分で、なぜか@supplier_carがnilになっています。
そのため、updateメッソドの記述が間違っているのかと思い、独習railsでも確認してみたのですが、さしあたって自分には間違いが見つからず、手詰まり感が出てきたので質問させていただきました。

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

Rails 5.2.4.1
ruby 2.5.1
mysql 5.6.47
Mojave 10.14.6

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

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

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

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

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

guest

回答1

0

ベストアンサー

@supplier_car = SupplierCar.find_by(supplier_id: params[:id])

@supplier_car = SupplierCar.find_by(id: params[:id])
ではないかと。
=form_for @supplier_car,... ですので、渡ってくるidはsupplier_car のものです。

投稿2020/02/26 23:52

winterboum

総合スコア23329

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

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

murakmixi

2020/02/27 11:24

ありがとうございます。 IDをcurrent_supplier.idにしたらいきました! ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問