Rails acts_as_paranoid and has_many :through



所以我使用的是rails3_acts_as_paranoid gem,并且在通过关联控制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的某个地方。我想查询属于用户的所有文件,无论它们是否已删除,和/或属于已删除的文件夹。因此,我自然会假设做如下操作

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数组元素这样的事情。但是我不太了解如何处理复杂的作用域,也不知道有什么方法可用。

我的问题被否决了,不知道为什么。但我找到了答案:

当使用has_many through时,我遇到的问题是无法控制through模型的范围(在本例中为Folders)。

结果是你可以这样做

@myvar = Folder.unscoped { current_user.files.with_deleted } 
我想知道为什么,这样下次我可以问更好的问题。谢谢!

相关内容

  • 没有找到相关文章

最新更新