【发布时间】:2011-04-13 08:50:23
【问题描述】:
我有许多需要相同范围的模型。他们每个人都有一个 expiration_date 日期字段,我想写一个范围。
为了保持干燥,我想将范围放在一个模块中(在 /lib 中),我将用它来扩展每个模型。但是,当我在模块中调用 scope 时,方法是未定义的。
为了解决这个问题,我在包含模块时使用class_eval:
module ExpiresWithinScope
def self.extended(base)
scope_code = %q{scope :expires_within, lambda { |number_of_months_from_now| where("expiration_date BETWEEN ? AND ?", Date.today, Date.today + number_of_months_from_now) } }
base.class_eval(scope_code)
end
end
然后我在我的模型中使用extend ExpiresWithinScope。
这种方法有效,但感觉有点生硬。有没有更好的办法?
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-3