def self.something
- это метод класса, вызываемый с помощью:
Class.some_method
def something
- это метод экземпляра, вызываемый с помощью:
class = Class.new
class.some_method
Разница в том, что вызывается одиндля самого класса, другой для экземпляра класса.
Чтобы определить метод класса, вы также можете использовать имя класса, однако это усложнит процесс рефакторинга вбудущее как имя класса может измениться.
Пример кода:
class Foo
def self.a
"a class method"
end
def b
"an instance method"
end
def Foo.c
"another class method"
end
end
Foo.a # "a class method"
Foo.b # NoMethodError
Foo.c # "another class method"
bar = Foo.new
bar.a # NoMethodError
bar.b # "an instance method"
bar.c # NoMethodError