【发布时间】:2013-01-07 01:24:20
【问题描述】:
所以我正在使用 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.rb 中的某处说我想查询属于用户的所有文件,无论它们是否被删除,和/或属于已删除的文件夹。所以很自然我会假设做如下的事情
current_user.files.with_deleted
with_deleted 方法在删除files.deleted_at IS NULL 方面发挥作用
...但是... 它不会删除在幕后使用的文件夹的 default_scope。所以我们仍然有一个folders.deleted_at IS NULL 条件,阻止我检索属于那些已删除_at 不为空的文件夹的文件。
我想继续使用acts_as_paranoid,因为它在我的应用程序的所有其他地方都非常有用,并且我尽量不做手动过滤和弹出.where_values数组的元素之类的事情。但我对处理复杂范围或有哪些可用方法了解不多。
【问题讨论】:
-
看来#unscoped 方法就是您要在这里寻找的方法:apidock.com/rails/ActiveRecord/Scoping/Default/ClassMethods/…
-
我尝试了 unscoped 方法,但这会降低自动连接桥接用户到文件的范围,特别是
INNER JOIN folders ON files.folder_id = folders.id WHERE folders.user_id = 1,除非我错过了 unscoped 的功能来保留它? -
我仍在检查是否找到解决方案,但请注意
@user = User.find current_user.id行没有用,因为您正在重新加载 current_user -
好的,更新它的用处不大:)
标签: ruby ruby-on-rails-3 scope associations acts-as-paranoid