【发布时间】:2014-09-16 02:30:52
【问题描述】:
这可能是一个非常简单的问题,但我一直试图了解如何在 Rails 4.0 中做到这一点。基本上,它是User has_many Post 的基本用户和发布应用程序。此外,在每个帖子中都有一个布尔值:images_to_process。它的作用是表明所有属于这个Post 的图像是否已经被delayed_jobs 处理。不应显示不完整的帖子以避免图像加载问题。这是适用于 Rails 3 的代码:
class Post < ActiveRecord::Base
default_scope { where(is_deleted: false, images_to_process: 0) }
scope :everything, -> user {with_exclusive_scope { where(is_deleted: false, user_id: user) }}
您可能已经注意到,with_exclusive_scope 在 Rails 4 中已被贬值。我知道使用类方法可能更容易做到这一点,但我不想放弃范围可链接和可扩展的便利。我应该怎么做才能替换 Rails 4 中的with_exclusive_scope?
感谢阅读
【问题讨论】:
-
这不是问题的答案,而是一个建议。根本不要使用 default_scope。它在应用程序的整个生命周期中引起的头痛比它实际解决的问题要多得多。并且使用 rescope 或其他技术来删除以前的默认关系似乎不是很干。
-
确实如此。最初我仍然选择 default_scope 因为我认为在大多数情况下,这是真的。我不想对所有正常的邮政电话都要求 Post.active 。无论如何,这似乎应该是要走的路(考虑到范围的语法通过 RoR 3 到 4 到 4.1 有很多变化)
-
其实如果
scope不与default_scope的定义合并,一切问题都会迎刃而解!为什么default_scope会这样设计?...
标签: ruby-on-rails ruby-on-rails-4 scope