我有以下方法:
class Store < ActiveRecord::Base
def my_func(str)
puts str
end
end
我似乎无法从课外呼叫它:
Store::my_func("hi")
知道为什么吗?
答案 0 :(得分:4)
您定义的是实例方法。基本上这意味着你只能在该类的实例上调用它。
store = Store.new
store.my_func("hi")
如果你想要一个类方法,你需要以不同的方式定义它。之一:
class Store < ActiveRecord::Base
def self.my_func(str)
puts str
end
end
或者(如果您定义了很多类方法,则更有用):
class Store < ActiveRecord::Base
class << self
def my_func(str)
puts str
end
end
end
以上两个工作因为类也是类Class
的实例,所以上面两个例子中的隐式接收器self
就是那个实例(类本身)。
你调用这样的类方法:
Store.my_func("hi")