所以我使用的是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 }
我想知道为什么,这样下次我可以问更好的问题。谢谢!