QA@IT
«質問へ戻る

質問を投稿

[rails]チェックボックスによってDELETEのSQLが発行されたときのコールバックの取得方法

表題の件、知見のある方ご指導いただきたく質問いたしました。

環境
Ruby2.1.2 / Rails4.1.6
PostgreSQL9.3

現状

  • Shop <-> ShopItem <-> Item という関連でテーブルを持っている。
  • ShopItemテーブルにはacts_as_listを使うためにpositionカラムがある(shop_idごとに順番保持)。
  • Itemが削除された場合、すでにShopItemにある同じitem_idのデータもDELETEされる。
  • DELETEされた結果、positionが(shop_idごとに)連続した値にならないことがある(2番と3番を削除したら、position=1,4,5...になる)

やりたいこと

  • DELETEが実行されたタイミングでpositionの値を1から振りなおす。
  • 並べ替えを「▲」「▼」 ボタンで行っており、1番目が消されるとitem.first?などで判定ができずに先頭データでも「▲」が表示されてしまうのを防ぎたい(最終手段でCSSのli:first-childとかで非表示にする?)。

しかしafter_destroyではコールバックを呼び出せませんでした。after_saveなどでItemが追加された場合は呼び出せました。
何かよい対応方法が思いつく方、いらっしゃいましたらアドバイスいただけると幸いです。

よろしくお願いいたします。

補足

更新時に送信されるパラメタ例。
下記例だと、ShopItem.item_id が 2と3以外は、そのレコードをDELETEするようです(shop_id毎)。

Parameters: {"utf8"=>"✓", "authenticity_token"=>"xxx", "shop"=>{"item_ids"=>["2", "3", ""], "commit"=>"更新"}
表題の件、知見のある方ご指導いただきたく質問いたしました。
```
環境
Ruby2.1.2 / Rails4.1.6
PostgreSQL9.3
```


#### 現状
* ```Shop <-> ShopItem <-> Item``` という関連でテーブルを持っている。
* ShopItemテーブルにはacts_as_listを使うためにpositionカラムがある(shop_idごとに順番保持)。
* Itemが削除された場合、すでにShopItemにある同じitem_idのデータもDELETEされる。
* DELETEされた結果、positionが(shop_idごとに)連続した値にならないことがある(2番と3番を削除したら、position=1,4,5...になる)

#### やりたいこと
* DELETEが実行されたタイミングでpositionの値を1から振りなおす。
* 並べ替えを「▲」「▼」 ボタンで行っており、1番目が消されるとitem.first?などで判定ができずに先頭データでも「▲」が表示されてしまうのを防ぎたい(最終手段でCSSのli:first-childとかで非表示にする?)。

しかし```after_destroy```ではコールバックを呼び出せませんでした。```after_save```などでItemが追加された場合は呼び出せました。
何かよい対応方法が思いつく方、いらっしゃいましたらアドバイスいただけると幸いです。

よろしくお願いいたします。

#### 補足
更新時に送信されるパラメタ例。
下記例だと、ShopItem.item_id が 2と3以外は、そのレコードをDELETEするようです(shop_id毎)。
```
Parameters: {"utf8"=>"✓", "authenticity_token"=>"xxx", "shop"=>{"item_ids"=>["2", "3", ""], "commit"=>"更新"}
```