👆

updateがうまくいかない

2023/07/29に公開

🍍成功したとき


updateに成功した場合上画像のような黄色い文字が出るのでそれを目安に解決していく。

🍍1 Error発生


ArgumentErrorが発生していた。
今回の原因はエラー表示されている通り @item.updateの後ろに引数を記述していなかったため起こっている。そのため、下記のように引数を設定することで解決。

admin/item_controller.rb
def update #商品の更新
    @item = Item.find(params[:id])
    @item.update (item_params)
    redirect_to admin_item_path(@item)
end

🍍2 Editページで更新して内容書き換えてupdateするといける

現状

リロードしないとupdateボタンを押してもエラー表示もされないし何もできない状態になっている。

  • 前にform_withの書き方がおかしくてこれと同じリロードしないと動作してくれない現象が起きた。
    そのため正常に動いている、投稿機能と見比べて同じ記述にしたが変化がなかった。→書き方は問題なさそう。

https://teratail.com/questions/237566?whotofollow=

同じような方がいたので記事を確認してみたがやはり、form_withの書き方のようである。

検証ツールを用いると確認しやすい

Ctrl+Shift+iで検証ツールを開きformタグの記述の部分を確認してみる

通常だと上画像のようにformタグに挟まれた状態になっており

タグの中を開くとinputタグが中に入っていることがわかる。また、更新ボタンも中にちゃんと納まっていることがわかる。

収まっていないとupdateされないので、formタグが機能しないところに書いてないか確認する。

  • tableタグの中に書いているときは要注意。
  • divタグを入れてしまっても動かなくなるので注意。

🍍3 Unpermitted parameterのエラーが出てる

現状

ターミナルを確認するとUnpermitted parameterというエラー文が出ていた。
parameterに設定されてないよ~って言われてるみたい。

statusは今回は自分で入力するものではなく、プルダウンで選択するものだったのでparamsに入れなくていいかなって思って入れなかったんだけど。status_paramsで呼び出してるからそういうの関係ないのかな?
paramsってよくわかんないな。

解決

とりあえずparameterにgenre_idを記述。

🍍4 updateボタン押しても反応しない

updateのエラーを文が出てくるようにupdateの後ろにビックリマークをつけて記述しもう一度updateボタンを押してみると以下のようなエラー文が出た。

parametersの部分を見てみると一見最後まで問題なくいけてるような気がするけど、、この場合だとどこのテーブルにあるmaking_statusか記述されていないのでダメ🙉

上の画像のように "order_detail"=>{"making_status"=>"制作待ち"}となっていないためうまくupdateできていないみたい。

解決

原因は<%= form_with %>に記述していたurlの記述が間違っていたため、うまくいっていたなかったみたいです。
以前エラーが出たときはコントロールのupdateメソッドのrender_toのurlをミスしてたので動かなかった時もありました。
url要注意ですね🫠

余談


あとは、今回のようなenumを使っている時、ビューにはmaking_statusのセレクトボタンを作成するようにしていたのでmodelでのenumの記述は以下のようにしないといけなかったのですが、enum statusと記述してしまい更新がうまくいっていませんでした。記述ミスにも気を付けます。

Discussion