【发布时间】:2021-01-22 17:14:11
【问题描述】:
在我的代码库的几个地方,我有一个硬编码的整数,我必须将它拉入一个方法中,以便可以在一个地方进行更改。我在lib/due_date.rb 中创建了一个模块并添加了一个方法:
module DueDate
def due_date(days=10)
days
end
end
我已经将它包含在一些模型类中并且它工作正常(这些类没有嵌套)。我遇到的问题是将它包含在嵌套模型类中。例如,当模型类看起来像这样时:
module A
module B
class C
include DueDate
end
end
end
我收到以下错误:
undefined local variable or method 'due_date' for #<Class:......>
在class C 中,我首先尝试将其分配给类中其他地方使用的常量:
THRESHOLD = due_date
我尝试使用它的第二个地方是带有 where 子句的 scope:
scope :range -> {
.where("due_date <= NOW() + INTERNAL '#{due_date} days'")
}
如何将我的DueDate 模块包含在嵌套类中,以便我可以通过这两种方式使用due_date 方法?
更新: 在类中包含模块工作正常,所以我尝试使用不起作用的方法。
【问题讨论】:
-
这应该可以。你能说明你是如何调用这个方法的吗?
-
你并没有真正展示你在哪里使用它的完整上下文。这个常量赋值和作用域,是否在
class C的实例上下文中? -
您仍然没有显示完整的上下文。 “在 C 类内部”不回答它是在类范围内还是在实例范围内。请记住,每个类都可以在类或实例级别进行交互。 Siim 的回答解决了这个问题。
标签: ruby ruby-on-rails-5 rspec-rails