我在做这个
def self.a
...
end
def a
class.a
end
但是对于几种方法,我将不得不复制实例方法。
我在一个模块里思考
module A
def a; end
end
然后像这样在我的模型中使用它:
extend A
include A
但我不确定根据 Rails 文件夹结构将它放在哪里,甚至不确定是否将模块放入我的模型中。
有什么建议吗?
最佳答案
选项 1 - 扩展 self
如果您希望所有 实例方法也作为类方法,您可以简单地使用extend self
class A
def foo
...
end
def bar
...
end
extend self
end
这将允许您将 foo 称为 A.foo
或 A.new.foo
。
选项 2 - 包含的模块
如果您只想一些 实例方法作为类方法使用,那么您应该按照您的建议创建一个模块。您可以将该模块放在 lib/
文件夹中,然后需要它或将 lib
添加到您的自动加载路径。
你也可以像这样直接在类中包含模块:
class A
def not_shared
...
end
module SharedMethods
def foo
...
end
def bar
...
end
end
extend SharedMethods
include SharedMethods
end
选项 3 - 代表
如果您使用的是 Rails(或仅使用 ActiveSupport),您还可以使用它添加到类/模块的 delegate
方法。
class A
def not_shared
...
end
def foo
...
end
def bar
...
end
delegate :foo, :bar, to: 'self.class'
end
详情请看这里
关于ruby-on-rails - 如何在 Rails 模型中创建多个类和实例方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16660357/