ruby - Rails acts_as_paranoid 和 has_many :through

标签 ruby ruby-on-rails-3 scope associations acts-as-paranoid

所以我正在使用 rails3_acts_as_paranoid gem,并且在使用 has_many :through associations 控制范围时遇到了一些问题。

例如

# 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 数组的元素。但我对处理复杂范围或可用的方法了解不多。

最佳答案

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

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

原来你可以这样做

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

对于投反对票的人 - 我想知道为什么,这样下次我可以提出更好的问题。谢谢!

关于ruby - Rails acts_as_paranoid 和 has_many :through,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14188677/

相关文章:

java - ThisActivityName.this.finish() 和 finish() 之间有什么区别

ruby-on-rails - Redis EXECABORT 事务因先前的错误而被丢弃。 (Redis::命令错误)

ruby - Rails 3 渲染/部分

ruby-on-rails - gulp-ruby-sass 无法导入文件

ruby-on-rails - Rails 3 ActiveRecord 条件包括?

sql - SQL游标中表变量的范围

ruby - 续集:如何获取数据集列的数据类型

ruby - 从命令行执行 ruby​​ 的参数列表

ruby - RabbitMQ Bunny 并行消费者

c - 从 C 中的函数返回数组