在嵌套模型中包含模块方法 Class
Include Module Method in Nested Model Class
在我的代码库的几个地方,我有一个硬编码的整数,我必须将它放入一个方法中,以便可以在一个地方更改它。我在 lib/due_date.rb
中创建了一个模块并添加了一个方法:
module DueDate
def due_date(days=10)
days
end
end
我已将其包含在某些模型中 class,并且工作正常(这些 class 未嵌套)。我遇到的问题是将它包含在嵌套模型 classes 中。例如,当模型 class 看起来像这样时:
module A
module B
class C
include DueDate
end
end
end
我收到以下错误:
undefined local variable or method 'due_date' for #<Class:......>
在 class C
中,我首先尝试将其分配给在 class 的其他地方使用的常量:
THRESHOLD = due_date
我尝试使用它的第二个地方是在带有 where 子句的 scope
中:
scope :range -> {
.where("due_date <= NOW() + INTERNAL '#{due_date} days'")
}
如何在嵌套的 classes 中包含我的 DueDate
模块,以便我可以通过这两种方式使用 due_date
方法?
更新:
在 class 中包含模块工作正常,所以这就是我尝试使用不起作用的方法的方式。
如果您希望方法作为实例方法可用,那么您所做的一切都是正确的。
但是,从您的示例来看,您似乎正试图将其用作 class 方法。为此,您需要 extend
模块而不是 include
模块。
module A
module B
class C
extend DueDate
THRESHOLD = due_date
end
end
end
A::B::C::THRESHOLD #=> 10
A::B::C.due_date #=> 10
在我的代码库的几个地方,我有一个硬编码的整数,我必须将它放入一个方法中,以便可以在一个地方更改它。我在 lib/due_date.rb
中创建了一个模块并添加了一个方法:
module DueDate
def due_date(days=10)
days
end
end
我已将其包含在某些模型中 class,并且工作正常(这些 class 未嵌套)。我遇到的问题是将它包含在嵌套模型 classes 中。例如,当模型 class 看起来像这样时:
module A
module B
class C
include DueDate
end
end
end
我收到以下错误:
undefined local variable or method 'due_date' for #<Class:......>
在 class C
中,我首先尝试将其分配给在 class 的其他地方使用的常量:
THRESHOLD = due_date
我尝试使用它的第二个地方是在带有 where 子句的 scope
中:
scope :range -> {
.where("due_date <= NOW() + INTERNAL '#{due_date} days'")
}
如何在嵌套的 classes 中包含我的 DueDate
模块,以便我可以通过这两种方式使用 due_date
方法?
更新: 在 class 中包含模块工作正常,所以这就是我尝试使用不起作用的方法的方式。
如果您希望方法作为实例方法可用,那么您所做的一切都是正确的。
但是,从您的示例来看,您似乎正试图将其用作 class 方法。为此,您需要 extend
模块而不是 include
模块。
module A
module B
class C
extend DueDate
THRESHOLD = due_date
end
end
end
A::B::C::THRESHOLD #=> 10
A::B::C.due_date #=> 10