1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

制作状況 

Posted at

```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 ```

```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>

```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>

1
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?