@seiyarick (seiya)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

[WEBアプリケーション]管理者側のユーザーの注文履歴編集について

Q&A

Closed

解決したいこと

ユーザーが商品のを注文できるWEBアプリケーションを作っています。
その中で管理者側から見たユーザーの注文履歴の更新昨日の実装中にエラーが発生しました。
解決方法を教えて頂きたいです。

発生している問題・エラー

NameError in Admin::OrderDetailsController#update
undefined local variable or method `ordering_detail_params' for #<Admin::OrderDetailsController:0x000000054717d8>
Did you mean?
ordering_detail

該当するソースコード

*/controllers/admin/order_details_controller.rb

class Admin::OrderDetailsController < ApplicationController

  def update
    ordering_detail=OrderingDetail.find(params[:id])
    ordering_detail.update(ordering_detail_params)
    redirect_to admin_order_path(ordering_detail.id)
  end

  private
  def ordering_detail
    params.require(:ordering_detail).permit(:making_status)
  end
end

*/views/admin/orders/show.html.erb

html.erb
   <% @ordering_details.each do |ordering_detail| %>
            <tbody>
              <tr>
                <td><%= ordering_detail.item.name %></td>
                <td><%= ordering_detail.item.add_tax_price.to_s(:delimited, delimiter: ',') %></td>
                <td><%= ordering_detail.amount %></td>
                <td><%= (ordering_detail.item.add_tax_price)*(ordering_detail.amount) %></td>
                    <%= form_with model: ordering_detail, url: admin_path(ordering_detail), method: :patch do |f| %>
                <td>
                    <%= f.select:making_status, OrderingDetail.making_statuses_i18n.invert,{} %><!--invertでkeyとvalueを入れ替える。{}はmaiking_statusesの中身を指す-->
                    <%= f.submit "更新", class:" btn btn-success" %>
                </td>
                    <% end %>
              </tr>
            </tbody>
                <% end %>

*/config/routes.rb

namespace :admin do
    get 'homes/top'
    get 'admin' => 'homes#top'
    post 'homes/top' => 'homes#top'#管理者ログイン時に通るパス
    patch 'ordering_details/:id' => "order_details#update"
    resources :customers, only: [:index, :show, :edit, :update]
    resources :genres, only: [:index, :edit, :create, :update]
    resources :items, only: [:index, :new, :show, :edit, :create, :update]
    resources :orders, only: [:show, :create]
  end

*ターミナル

   3:   def update
    4:     ordering_detail=OrderingDetail.find(params[:id])
    5:     byebug
=>  6:     ordering_detail.update(ordering_detail_params)
    7:     redirect_to admin_order_path(ordering_detail.id)
    8:   end
    9: 
   10:   private
(byebug) params
#<ActionController::Parameters {"_method"=>"patch", "authenticity_token"=>"R1_FaElws81G8gLkVNID_95Ag25KA-pea6EGz7qwN8-ivQND682uOnP1G5ITD0eXv8QYAah1Y7W2x5NwVtOQAQ", "ordering_detail"=>{"making_status"=>"cannot"}, "commit"=>"更新", "controller"=>"admin/order_details", "action"=>"update", "id"=>"1"} permitted: false>
(byebug) ordering_detail
#<OrderingDetail id: 1, price: 3000, amount: 1, order_id: 1, item_id: 1, making_status: nil, created_at: "2022-03-30 02:10:05.896386000 +0000", updated_at: "2022-03-30 02:10:05.896386000 +0000">

自分で試したこと

ordeling_detailに対してのNameErrorが出ているのでコントローラ内のアクションや下のparamsの記述を確認したのですがわかりませんでした。
関係がないかもしれませんがbyebugで何かわかるかと思って試したりしました。
説明の至らない部分もあるかと思いますがよろしくお願いします。

0 likes

1Answer

ordering_detail_paramsという変数がControllerのどこにも定義されていないというエラーです。確かに見る限りControllerにそのような変数は定義されていません。

0Like

Comments

  1. @seiyarick

    Questioner

    解答いただきありがとうございます。

    以下の記述を def ordering_detail_params としてupdateアクションにある引数と合わせることで解決しました。
    ーーーーーーーーーーーー
    def ordering_detail
    params.require(:ordering_detail).permit(:making_status)
    end
    end
    ーーーーーーーーーーーー
    変数と引数の仕組みをもっと理解しないとこのようなエラーがなくならないと感じました。
    以後注意して勉強を続けていきます。

    ありがとうございました!

Your answer might help someone💌