2013-01-07 18 views
7

私はrails3_acts_as_paranoid gemを使用しており、has_many:throughアソシエーションを使用してスコープを制御するいくつかの問題を抱えています。rails acts_as_paranoidとhas_many:through

# Folder.rb 
acts_as_paranoid 
belongs_to :user 
has_many :files, :dependent => :destroy 

- -

# User.rb 
acts_as_paranoid 
has_many :folders 
has_many :files, :through => :folders 

例えば

# File.rb 
acts_as_paranoid 
belongs_to :files 

は今ちょうど私がユーザーに属するすべてのファイルを照会するどこかusers_controller.rbで言うことができます、それらが削除されたかどうか、および/または削除されたフォルダに属しているかどうかを判断します。だから、当然、私は、次のような何かを引き受ける

current_user.files.with_deleted 

with_deleted方法、それが使用されているフォルダのdefault_scopeを削除するdoesntの...files.deleted_at IS NULL

を除去するのに仕事です...しかしんカーテンの裏側の一種。だから私はまだfolders.deleted_at IS NULLの条件を持っているので、deleted_atがnullでないフォルダに属するファイルを検索できません。

私はacts_as_paranoidを使い続けたいと思っています。私のアプリの他の場所では非常に便利で、手動でのフィルタリングや.where_values配列の要素のポップアップなどをしないようにしています。しかし、私は複雑なスコープの扱いや利用可能なメソッドについてあまり知らない。

+0

#unscopedメソッドはあなたが探しているものです:http://apidock.com/rails/ActiveRecord/Scoping/Default/ClassMethods/unscoped – pjam

+0

私はスコープのない方法を試しましたが、 automagicはユーザをファイル、特にINNER JOINフォルダ上でBridgingすることに参加します。files.folder_id = folders.id WHERE folders.user_id = 1' – Misterparker

+0

解決策が見つかるかどうかチェックしていますが、 '@user = User.find current_user.id'という行はcurrent_userを再読み込みするときに役に立たないことに注意してください。 – pjam

答えて

9

私の質問は投票が遅れてしまった理由は分かりません。しかし、私は答えを見つけました:

私がしていた問題は、スルーモデル(ここではフォルダ)の範囲を制御できないことでした。

あなたはそれをdownvoted誰にこの

@myvar = Folder.unscoped { current_user.files.with_deleted } 

を行うことができ判明 - 私は理由を知りたいのですが、私はより良い質問に次の時間を求めることができます。ありがとう!

関連する問題