だから私は rails3_acts_as_paranoid gem を使っていて、 has_many :through アソシエーションでスコープを制御するのにいくつか問題があります。
例えば
# User.rb
acts_as_paranoid
has_many :folders
has_many :files, :through => :folders
-
# Folder.rb
acts_as_paranoid
belongs_to :user
has_many :files, :dependent => :destroy
-
# File.rb
acts_as_paranoid
belongs_to :files
ここで、users_controller.rb のどこかで、ユーザーに属するすべてのファイルが削除されているかどうか、および/または削除されたフォルダーに属しているかどうかを照会したいとしましょう。だから当然、私は次のようなことをすると仮定します
current_user.files.with_deleted
with_deleted
メソッドは、files.deleted_at IS NULL
...しかし...カーテンの後ろで使用されるフォルダーのdefault_scopeは削除されません。したがって、まだfolders.deleted_at IS NULL
条件があり、deleted_at が null でないフォルダーに属するファイルを取得できません。
私はacts_as_paranoidを使い続けたいと思っています.acts_as_paranoidは私のアプリの他のすべての場所で非常に便利であり、手動フィルタリングや.where_values
配列の要素のポップアウトなどを行わないようにしています. しかし、複雑なスコープの処理や利用可能なメソッドについてはあまり知りません。