Mis*_*ker 7 ruby scope associations ruby-on-rails-3 acts-as-paranoid
所以我使用的是rails3_acts_as_paranoid gem,并且在使用has_many控制范围时出现了一些问题:通过关联.
例如
# User.rb
acts_as_paranoid
has_many :folders
has_many :files, :through => :folders
Run Code Online (Sandbox Code Playgroud)
-
# Folder.rb
acts_as_paranoid
belongs_to :user
has_many :files, :dependent => :destroy
Run Code Online (Sandbox Code Playgroud)
-
# File.rb
acts_as_paranoid
belongs_to :files
Run Code Online (Sandbox Code Playgroud)
现在让我们在users_controller.rb的某个地方说,我想查询属于用户的所有文件,是否已删除,和/或属于已删除的文件夹.所以我自然会假设做类似以下的事情
current_user.files.with_deleted
Run Code Online (Sandbox Code Playgroud)
with_deleted 方法做它的工作去除 files.deleted_at IS NULL
...但是......它没有删除default_Scope用于幕后使用的文件夹.所以我们仍然有一个folders.deleted_at IS NULL条件,阻止我检索属于那些deleted_at不为null的文件夹的文件.
我想继续使用acts_as_paranoid,因为它在我的应用程序的所有其他位置非常有用,并且我试图不做像手动过滤和弹出.where_values数组元素之类的东西.但我对处理复杂范围或可用的方法知之甚少.
Mis*_*ker 10
好吧,我的问题得到了投票,不知道为什么.但我找到了答案:
当遇到has_many时,我遇到的问题是无法控制直通模型的范围(在本例中为文件夹).
事实证明你可以做到这一点
@myvar = Folder.unscoped { current_user.files.with_deleted }
Run Code Online (Sandbox Code Playgroud)
对于那些贬低它的人 - 我想知道为什么,所以下次我可以提出更好的问题.谢谢!
| 归档时间: |
|
| 查看次数: |
2566 次 |
| 最近记录: |