制作状況　

<h2></h2>
<p></p>
```model/order.rb
class Order < ApplicationRecord
    :
    has_many :ordered_items
    has_many :items, through: :ordered_items
    enum status: {"入金待ち":0,"入金確認":1, "製作中":2, "発送準備中":3, "発送済み":4}
:
end
```
```model/ordered_item.rb
class OrderedItem < ApplicationRecord
    belongs_to :order
    belongs_to :item
    enum making_status: {"製作不可":0,"製作待ち":1,"製作中":2,"製作終了":3}
end
```

<h2></h2>
<p></p>
```ruby:orders.controller.rb
class Admin::OrdersController < ApplicationController
 def show
    @order = Order.find(params[:id])
    @ordered_items = @order.ordered_items
 end
    # 注文ステータスの更新
 def update
     @order = Order.find(params[:id]) # ステータス更新ボタンが押された注文データ特定
     @ordered_items = @order.ordered_items # 注文商品から注文商品テーブルの呼び出し
     @order.update(order_params)# 注文ステータスの更新、更新するカラムはstatus
  
  　　if @order.status == "入金確認"    # 紐づく注文ステータスが「入金確認」に更新されていたら
      　@ordered_items.update_all(making_status: "製作待ち")   # 制作ステータスを全商品「製作待ち」に更新
  　　end
    redirect_to admin_order_path(@order)
 end
 private
    def order_params
        params.require(:order).permit(:status)
    end
end
```

<h2></h2>
<p></p>
```html:orders/show.html.erb
<tr>
 <th>注文ステータス</th>
 <td>
  <%= form_with model: @order, url: admin_order_path,local:true, method: :patch do |f| %>
     <%= f.select :status, Order.statuses.keys %>
                  #status: {"入金待ち":0,"入金確認":1, "製作中":2, "発送準備中":3, "発送済み":4}
     <%= f.submit '更新'  ,class: "btn btn-success btn-sm" %>
  <% end %>
   </td>
</tr>
:
<table>
 <tr>
   <th>商品名</th>
   <th>単価(税込)</th>
   <th>個数</th>
   <th>小計</th>
   <th>制作ステータス</th>
   <th></th>
 </tr>
<% total=0 %>
<% @ordered_items.each do |ordered_item|%>　　#注文商品一覧が出る
 <tr>
   <td><%= ordered_item.item.name %></td>　　#商品名
   <td><%= ordered_item.tax_included_price %></td>　#税込価格
   <td><%= ordered_item.quantity %></td>　　　　　　　#数量
   <td><%= total += ordered_item.tax_included_price*ordered_item.quantity %></td>　 #小計
   <td>
       <%= form_with model: ordered_item, url: admin_ordered_item_path(ordered_item), local:true,method: :patch do |f| %>
         <%= f.select :making_status, OrderedItem.making_statuses.keys %>
　　　　　　　    　#{"製作不可":0,"製作待ち":1,"製作中":2,"製作終了":3}
         <%= f.submit "更新", class: "btn btn-success btn-sm" %>
       <% end %>
   </td>
 </tr>
<%end%>
</table>
```

<h2></h2>
<p></p>
```ruby:OrderedItemsController 
class Admin::OrderedItemsController < ApplicationController
  before_action :authenticate_admin!  # making_status => 制作ステータス(OrderedItemsモデルのカラム)
                                      # status        => 注文ステータス(Orderモデルのカラム)
 def update
   @ordered_item = OrderedItem.find(params[:id]) # making_statusボタンどれ押されたか特定
   @order = @ordered_item.order # 注文商品から注文テーブルの呼び出し（何度も呼び出すのは処理が増える為）
   @ordered_item.update(ordered_item_params) # 製作ステータスの更新にはmaking_statusのデータ取得を必要と定義
		
    if @ordered_item.making_status == "製作中"    # 紐づく商品のmaking_statusがひとつでも「製作中」になったら
       @order.update(status: "製作中")  # 注文ステータスを「製作中」に"自動更新"
	    
    	# 「注文商品の個数」、「making_statusが「製作終了」の商品数」カウント
    	# 数が一致すれば、全商品のmaking_statusが「製作終了」となる
    	# 前提の補足: パティシエは商品が制作終了するたびにその商品のmaking_statusを3に"手動更新"していく
     elsif @order.ordered_items.count ==  @order.ordered_items.where(making_status: "製作終了").count
           @order.update(status: "発送準備中") #注文ステータスを「発送準備中」に"自動更新"
      end
   redirect_to admin_order_path(@ordered_item.order) #注文詳細に遷移
end
	
	private

    def ordered_item_params
        params.require(:ordered_item).permit(:making_status)
    end
end

```

<h2></h2>
<p></p>
```


```

<h2></h2>
<p></p>
```
```

<h2></h2>
<p></p>
```
```

<h2></h2>
<p></p>
```
```

<h2></h2>
<p></p>
```
```



<h2></h2>
<p></p>
```
```

<h2></h2>
<p></p>
```
```

<h2></h2>
<p></p>
```
```

<h2></h2>
<p></p>
```
```

<h2></h2>
<p></p>
```
```

<h2></h2>
<p></p>
```
```

<h2></h2>
<p></p>
```
```

<h2></h2>
<p></p>
```
```

<h2></h2>
<p></p>
```
```

<h2></h2>
<p></p>
```
```

<h2></h2>
<p></p>
```
```