通过一个很好的语法,它可以很容易地为你的类添加功能。
无论如何,在Rails 3.2中,InstanceMethods模块已被弃用:
# edit: don't do this! The method definition should just be in the body of the module
included do
def my_method; end
end
发布于 2018-05-09 18:53:42
代码:
module TagLib
extend ActiveSupport::Concern
module ClassMethods
def find_by_tags()
# ...
end
end
module InstanceMethods
def tags()
# ...
end
end
end
将TagLib包含到您的类中时关注通过ClassMethods模块自动扩展该类,并包含InstanceMethods模块。代码:
class Foo
include TagLib
# is roughly the same as
include TagLib::InstanceMethods
extend TagLib::ClassMethods
end
但正如你可能已经注意到的那样,我们已经包含了TagLib模块本身,因此它内部定义的方法已经可以作为类中的实例方法了。
module TagLib
extend ActiveSupport::Concern
module ClassMethods
def find_by_tags()
# ...
end
end
def tags()
# ...
end
end
class Foo
include TagLib
# does only `extend TagLib::ClassMethods` for you
end
https://stackoverflow.com/questions/-100008436
复制相似问题