acts_as_list: gem か plugin か
2010/11/29
acts_as_list は、モデルオブジェクトの並び順を維持したり、順番を入れ替えたりするための仕組みです。
Rails 1.x の時代には、Rails 本体に組み込まれていたけれど、その後プラグインとして分離されました。
便利なものなので、私はよく使います。
ソースコードは https://github.com/rails/acts_as_list で手に入ります。
Rails 3 のアプリケーションにプラグインとして組み込むなら、次のコマンドを実行します。
rails plugin install git://github.com/rails/acts_as_list.git
rubygems.org で検索すると、gem 版の acts_as_list が存在するので、私はてっきり同じものかと思っていて、これまではこちらを使っていたのですが、gem 版は 2008 年 7 月で更新が止まっており、ちょっと古いんですね。
gem 版にはひとつ問題があります。
オブジェクトを destroy するときに、before_destroy コールバックとして remove_from_list が動くのですが、その中で position フィールドの値を null に更新しようとします。
削除しようとしているレコードの position を更新するのは無駄です。無駄なだけではなくて、そこで before_save コールバックが発動してしまい、プログラマーを悩ませることになります。
というわけで、gem 版の更新が再開されるまで、プラグインの方を使いましょう。