我正在为Rails创建一个小程序,其中包含我在ApplicationHelper
模块内部模块内部构建的一些方法。这是一个例子:
module Helper
def time
Time.now.year
end
end
module ApplicationHelper
# Inherit from Helper here...
end
我知道ApplicationHelper < Helper
和include Helper
可以在类的上下文中工作,但是你会使用什么来进行模块到模块的继承?感谢。
答案 0 :(得分:27)
实际上你可以在另一个模块中定义一个模块,然后在外部模块中包含。
so ross$ cat >> mods.rb
module ApplicationHelper
module Helper
def time
Time.now.year
end
end
include Helper
end
class Test
include ApplicationHelper
def run
p time
end
self
end.new.run
so ross$ ruby mods.rb
2012
答案 1 :(得分:2)
一个潜在的问题是,如果包含的模块附加了类方法,那么这些方法可能会附加到错误的对象上。
在某些情况下,将“父”模块直接包含在基类中可能更安全,然后使用新方法包含另一个模块。例如
module ApplicationHelper
def self.included(base)
base.class_eval do
include Helper
include InstanceMethods
end
end
module InstanceMethods
def new_method
#..
end
end
end
新方法未直接在ApplicationHelper
中定义,因为include Helper
将在方法定义之后运行,导致它们被Helper
覆盖。也可以在class_eval
块