searchlogic + acts_as_paranoid

なかなか更新できない日々が続いていますが、日々Ruby on Railsでの開発を続けています。
最近は認証システムをrestful_authenticationからauthlogicに切り替えたり、
searchlogicを使ってみたりとbinarylogic様のプラグインを使わせてもらっています。

http://www.binarylogic.com/


searchlogicに関しては日本(語)での使用実績が少ないのか、
情報が無く苦労しましたがいくつか修正することで、なんとか使えるようになりました。
場当たりなコードを書いたので修正しなければですが。


今回はsearchlogicを使っている環境下でacts_as_paranoid(論理削除)を使う方法の備忘録です。

元々この組み合わせで正常に使えるといった事例が見当たりませんが
どちらとも捨てがたい機能なので使えるようにしてみました。


削除済みのデータを含めて検索する、acts_as_paranoidの「with_deleted」オプションを
searchlogicのActiveRecordオプションとして指定しても下記のようなエラーとなります。

undefined method `with_deleted=' for #25}>


そこで下記を編集すると幸せになれます。

plugin/searchlogic/lib/searchlogic/active_record/base.rb
215〜217行目

      def valid_find_options
 -        VALID_FIND_OPTIONS
 +        VALID_FIND_OPTIONS << :with_deleted unless VALID_FIND_OPTIONS.include?(:with_deleted)
      end


使い方(controller)

@search = Model.new_search(params[:search])
@search.with_deleted = true


searchlogicの日本語の情報はほんとうに少ないですが、チュートリアルも多く便利だと思います。