2013-02-13 94 views
1

我的意思是,我想在我的模块中创建一个类方法,该方法将由包含该模块的类使用。他们在分开的文件。在模块中定义类方法

到目前为止,我有这样的事情:

module Base 
    def self.all 
    puts "All Users" 
    end 
end 

class User 
    include Base 
end 

但我发现了:NoMethodError: undefined method所有”用户:Class`

能否请您解释一下这个问题,如果我在做什么是不好的做法还是违背任何原则?

回答

3

可以extend模块中的类,你的代码应该是这样的:

module Base 
    def all 
    puts "All Users" 
    end 
end 

class User 
    extend Base 
end 

当你做这样的事情:

module MyModule 
    def self.module_method 
    puts "module!" 
    end 
end 

你实际上添加的方法在模块本身,你可以调用像这样的以前的方法:

MyModule.module_method 

有我这是一种只包含module并获得所需行为的方法,但我不认为这可能被认为是“要走的路”。看一下例子:

module Base 
    def self.included(klass) 
    def klass.all 
     puts "all users" 
    end 
    end 
end 

class User 
    include Base 
end 

但是就像我说的,如果你可以用extend类的方法去,这是一个更适合。

+0

谢谢大家!这和@安东的答案解决了这个问题。 – 2013-02-13 21:01:17