acts_as_paranoidを抽象クラスに適用すると検索に失敗する

抽象クラスを継承してクラスを作る。継承元の抽象クラスにacts_as_paranoidを適用する。

class Hoge < ActiveRecord::Base
  self.abstract_class = true
  acts_as_paranoid
  ...
end

class Piyo < Hoge
   ...
   def self.search
     where(...)
   end
end

こんな感じの実装で検索を行うとsearchメソッドの実行でエラーとなる。

ActiveRecord::StatementInvalid:
   SQLite3::SQLException: no such column: .deleted_at: SELECT "piyos".* FROM "piyos"  WHERE (""."deleted_at" IS NULL) AND ....

テーブル名がうまく解決できてない感じ。 acts_as_paranoidが対応出来ていないだけだと思い、継承先のクラスでacts_as_paranoidするようにした。

class Hoge < ActiveRecord::Base
  self.abstract_class = true
  ...
end

class Piyo < Hoge
  acts_as_paranoid
   ...
   def self.search
     where(...)
   end
end

参考 : https://github.com/goncalossilva/acts_as_paranoid/issues/21