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 版の更新が再開されるまで、プラグインの方を使いましょう。