Rails name_scope 作为 AR::Base 的扩展

发布于 2024-09-01 19:55:11 字数 214 浏览 12 评论 0原文

class SomeModel < ActiveRecord::Base
  named_scope :recent, lambda { { :conditions => ['created_at > ?', 1.week.ago] } }
end

我想扩展 AR::Base 类以使所有模型都具有此named_scope,我该如何做到这一点?

class SomeModel < ActiveRecord::Base
  named_scope :recent, lambda { { :conditions => ['created_at > ?', 1.week.ago] } }
end

I want to extend the AR::Base class to have this named_scope for all models, how I can do this ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

调妓 2024-09-08 19:55:11

config/initializers 中创建一个新的初始化程序文件,然后重新打开 ActiveRecord 的 Base 类以添加命名范围:

module ActiveRecord
  class Base
    named_scope :recent, lambda {
      { :conditions => ['created_at > ?', 1.week.ago] }
    } 
  end
end

— 当然,如果您尝试这样做,您会收到一个相当难看的错误在没有 created_at 属性的模型上使用此命名范围...

Create a new initializer file in config/initializers and then re-open ActiveRecord's Base class to add the named scope:

module ActiveRecord
  class Base
    named_scope :recent, lambda {
      { :conditions => ['created_at > ?', 1.week.ago] }
    } 
  end
end

—Of course you get a rather ugly error should you attempt to use this named scope on a model that doesn't have a created_at attribute...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文