ruby-on-rails - Ruby on Rails 的空作用域

标签 ruby-on-rails named-scope

以下问题:
我需要一个空范围之类的东西。这意味着这个范围是空的,但响应范围通常响应的所有方法。
我目前正在使用一些肮脏的技巧。我只是提供“1=0”作为条件。我觉得这真的很难看,因为它会命中数据库。简单地返回一个空数组是行不通的,因为结果必须响应作用域方法。

是否有更好的现有解决方案,或者我需要自己编写代码?

也许一些示例代码可以帮助解释我需要什么:


class User < ActiveRecord::Base
  named_scope :admins, :conditions => {:admin => true }
  named_scope :none_dirty, :conditions => "1=0" # this scope is always empty

  def none_broken
    []
  end

  def self.sum_score # okay, a bit simple, but a method like this should work!
    total = 0
    self.all.each do |user|
      total += user.score
    end
    return total
  end
end
User.admin.sum_score # the score i want to know
User.none_drity.sum_score # works, but hits the db
User.none_broken.sum_score # ...error, since it doesn't respond to sum_score

最佳答案

Rails 4 引入了 none范围。

它用于您有一个返回关系的方法的情况,但存在您不希望查询数据库的情况。

如果您希望范围返回未更改的范围,请使用 all :

不再调用Model.all立即执行查询并返回记录数组。在 Rails 4 中,调用 Model.all相当于现在不推荐使用的 Model.scoped .这意味着更多的关系可以链接到Model.all。并且结果将被懒惰地评估。

关于ruby-on-rails - Ruby on Rails 的空作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3735838/

相关文章:

ruby-on-rails - 使用 redirect_to 将模型属性传递给 Rails View

ruby-on-rails - RailsTutorial.org Chapter9 session.delete 问题

ruby-on-rails - 如何确定 Rails 3 中 ActiveRecord 关联的范围?

ruby-on-rails - named_scope 的问题导致 will_paginate 出错 - 如何将 group_by 包含在计数中?

ruby-on-rails - 在辅助文件和 Controller 文件中说明辅助方法之间的区别

ruby-on-rails - "rake routes"应该运行多长时间?

ruby-on-rails - Rails 3 默认范围,覆盖范围

ruby-on-rails-3 - named_scope 和 .first?

mysql - rails : Using named_scope which triggers a MySQL "in"

sql - 通过 named_scope 返回对象数组 -- has_many...belongs_to 关联; UNION ALL 查询