その他
    ホーム技術発信DoRubyRuby On Rails 論理削除のプラグインacts_as_paranoid

    Ruby On Rails 論理削除のプラグインacts_as_paranoid

    この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

    こんにちわ〜。
    今回はacts_as_paranoidというRailsのプラグインについてお話します。

    以前x5rさんがRuby on Railsでacts_as_paranoidを使い倒すという記事を書いてまして、それをみて今回大体おこなったので基本はこちらを見ていただければ大体わかると思います。
    私の記事では、その記事を見てできなかったところや、こんな動作してるなどを少しメモ程度に書いてあります。

    まず、今回のrailsのversionは、1.2.6です。

    とりあえずinstall前までは、x5rさんの記事と同じです。
    installのコマンドをたたいてもinstallされなかったので、

    ruby script/plugin install http://svn.techno-weenie.net/projects/plugins/acts_as_paranoid –force
    でinstallする事ができました。
    このプラグインを使う事で、find文を行うときに常に

    SELECT ・・・ FROM ・・・ WHERE
    deleted_at IS NOT NULL OR deleted_at > time.now ・・・
    とうように条件がついてくるようになります。
    この条件を外すために、:with_deletedオプションが有る訳ですね。

    次は、ページネートの拡張です。
    これは、自分が間違えただけだったのですが、pagination_extend.rbの内容をx5rさんの記事を参考に書いて作動させたところ
    ・かえってくる値が配列じゃない
    ・取得する情報が1つしかない
    なんていう状態になりました。
    これは、本当に初歩的なミスで、

    def paginator_and_collection_for_with_deleted(collection_id, options) #:nodoc:
    klass = options[:class_name].constantize
    page = params[options[:parameter]]
    count = count_collection_for_pagination_with_deleted(klass, options)
    paginator = Paginator.new(self, count, options[:per_page], page)
    collection = find_collection_for_pagination_with_deleted(klass, options, paginator)
    return paginator, collection
    end

    return paginator, collection
    を書き忘れていただけでした。。。値返さないじゃんっていう。。。。

    少し思った問題点としては、
    ・ページ読込み時に関係ない所でもinitファイルが読込まれるので、全体的に動作が遅くなる。
    ・多対多のMapテーブルでは、動作しないので物理削除のまま。
    といったところがあげられる。
    他にも結構バグが多いといもいわれているので、大きくなったプロジェクトを後から・・・というならしょうがないかもしれませんが、最初からこのプラグインを使って論理削除を行うということは、あまりしたくはないですね。

    ・・・installの事しか書いてないじゃん。。。
    まぁ、今回は以上でっす。