gpt4 book ai didi

ruby-on-rails-3 - 我可以在 Rails 中将常见的 ActiveRecord 范围(范围)与模块一起使用吗?

转载 作者:行者123 更新时间:2023-12-04 07:12:30 25 4
gpt4 key购买 nike

在 rails3 中,我在模型中制作了相同的范围。例如

class Common < ActiveRecord::Base
scope :recent , order('created_at DESC')
scope :before_at , lambda{|at| where("created_at < ?" , at) }
scope :after_at , lambda{|at| where("created_at > ?" , at) }
end

我想将公共(public)范围拆分为 lib 中的模块。所以我试试这个。
module ScopeExtension
module Timestamps
def self.included(base)
base.send :extend, ClassMethods
end

module ClassMethods
scope :recent , lambda{order('created_at DESC')}
scope :before_at , lambda{|at| where("created_at < ?" , at) }
scope :after_at , lambda{|at| where("created_at > ?" , at) }
end
end

我写这个
class Common < ActiveRecord::Base
include ScopeExtension::Timestamps
end

但是 Rails 显示了这个错误。
undefined method `scope' for ScopeExtension::Timestamps::ClassMethods:Module

(我没有忘记自动加载库)

如何在事件记录中轻松重用通用范围功能?

我猜这个问题与加载顺序有关。但我没有任何想法要解决。
请提示我。

最佳答案

我解决了这个调用 self.included(class) 的范围:

module Timestamps
def self.included(k)
k.scope :created_yesterday, k.where("created_at" => Date.yesterday.beginning_of_day..Date.yesterday.end_of_day)
k.scope :updated_yesterday, k.where("created_at" => Date.today.beginning_of_day..Date.today.end_of_day)
k.scope :created_today, k.where("created_at" => Date.today.beginning_of_day..Date.today.end_of_day)
k.scope :updated_today, k.where("created_at" => Date.today.beginning_of_day..Date.today.end_of_day)
end
end

关于ruby-on-rails-3 - 我可以在 Rails 中将常见的 ActiveRecord 范围(范围)与模块一起使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7223310/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com