RailsのModelを複雑にした時
SQLのこんな動きをしたい
UPDATEする時JOINしてGROUPBYしてって時
update items inner join ( select orders.item_id, count(*) count from orders group by item_id ) myorders set items.orders_count = myorders.count where items.id = myorders.item_id
Arelなら綺麗にかけるけども
現場でArelを使ってかいてなかった。。
って時に考えた結果こうなった
ベタ書きってどうよ。。
order = Order.select("#{Order.tn}.item_id, COUNT(*) count").group(:item_id) Item.joins("INNER JOIN (#{order.to_sql}) myorders") .where("#{Item.tn}.id = myorders.item_id") .update_all("#{Item.tn}.orders_count = myorders.count")