2013-01-07 31 views
7

所以我使用的是rails3_acts_as_paranoid寶石,並有一些問題控制範圍具有的has_many:through關聯。Rails的acts_as_paranoid和的has_many:通過

例如

# 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不爲空。

我想繼續使用acts_as_paranoid,因爲它在我的應用程序的所有其他地方都非常有用,並且正在嘗試不做類似手動篩選和彈出.where_values陣列的元素。但是我不太瞭解處理複雜範圍或可用的方法。

+0

看起來#unscoped方法就是你在這裏尋找的東西:http://apidock.com/rails/ActiveRecord/Scoping/Default/ClassMethods/unscoped – pjam

+0

我試過了unscoped的方法,但是這會降低範圍automagic將橋接用戶連接到文件,特別是'INNER JOIN文件夾ON文件.folder_id = folders.id WHERE folders.user_id = 1'除非也許我錯過了unscoped的一個功能來保持這一點? – Misterparker

+0

我仍然在檢查是否找到解決方案,但請注意,'@user = User.find current_user.id'行是無用的,因爲您正在重新載入current_user – pjam

回答

9

那麼我的問題得到了投票,不知道爲什麼。但是,我找到了答案:

當上通過的has_many,我是有這個問題是一個無法控制通過模型(文件夾在這種情況下)的範圍。

事實證明你可以做到這一點

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

爲了誰downvoted它 - 我想知道爲什麼,所以我可以提出更好的問題下一次。謝謝!