【问题标题】:rails3 unscoped within the model gets overriden by default_scope模型中未作用域的 rails 3 被 default_scope 覆盖
【发布时间】:2011-02-01 07:00:41
【问题描述】:

我有这个模型

用户.rb

default_scope :order => 'users.created_at DESC'

scope :ranking, lambda { unscoped { order('users.ranking DESC') }}

我仍然得到一个包含 ORDER BY users.created_at DESC, users.ranking DESC...的 to_sql...

谁能解释一下原因?

我真的不想从我将使用此模型的每个控制器中调用 unscoped。

谢谢!

【问题讨论】:

    标签: ruby-on-rails-3 arel


    【解决方案1】:

    正如您所发现的,default_scope 往往带来的麻烦多于其价值。如果你想坚持下去,你可以使用reorder 忽略之前的顺序:

    scope :ranking, reorder("ranking DESC")
    

    【讨论】:

      【解决方案2】:

      不知道为什么@TimPost 删除了我的答案,但我在一个项目中使用了 rails 3.0.5 和 ruby​​ 1.9.2,当我使用 reorder(顺便说一句)时,它在日志中说明了这一点

      弃用警告:重新排序已弃用。请改用 except(:order).order(...) 。 (来自<class:Item>

      所以我认为我的答案被删除是不公平的,我因为一个糟糕的回答而被骂

      【讨论】:

      • 我可以看到你删除的答案,上面写着,我引用:reorder is deprecated and doesn't remove a limit on the default scope. Any other ideas on how to remove the entire;它突然结束的地方。它被删除的两个原因:1)你没有完成你的第二句话。 2)看起来你的第二句话实际上是在试图问一个关于应该如何做的问题。关于 SO 的答案永远不应该问这样的问题——它们本身应该是新问题。
      • 柯克,感谢您的澄清。对此我深表歉意,下次我会确保做得更好。
      猜你喜欢
      • 2010-12-22
      • 1970-01-01
      • 2011-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-13
      • 1970-01-01
      相关资源
      最近更新 更多