从外部访问模型方法而不创建对象

时间:2011-11-07 11:20:05

标签: ruby

我有以下方法:

class Store < ActiveRecord::Base
  def my_func(str)
    puts str
  end
end

我似乎无法从课外呼叫它:

Store::my_func("hi")

知道为什么吗?

1 个答案:

答案 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")