Доступ к методам модели извне без создания объекта

#ruby

#ruby

Вопрос:

У меня есть следующий метод:

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

Кажется, я не могу вызвать это извне класса следующим образом:

 Store::my_func("hi")
  

Есть идеи, почему?

Комментарии:

1. Это работает только для экземпляров: Store.new.my_func("hi")

Ответ №1:

То, что вы определили, является методом экземпляра. В основном это означает, что вы можете вызывать его только в экземплярах этого класса.

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