Ответ 1
То же самое, что и
class Post < ActiveRecord::Base
def self.search(q)
# Class Level Method
# search from DB
end
def search2(qq)
# Instance Level Method
# search from DB
end
end
Методы класса работают над классом (например, Post), методы экземпляра работают на экземплярах этого класса (например, Post.new)
Некоторым нравится стиль class << self; code; end;
, потому что он сохраняет все методы уровня класса в хорошем блоке и в одном месте.
Другим нравится префикс каждого метода с self.
, чтобы явно знать, что это метод класса, а не метод экземпляра. Это вопрос стиля и того, как вы кодируете. Если вы поместите все методы класса в блок, например class << self
, и этот блок достаточно длинный, строка class << self
может отсутствовать в вашем представлении редактора, что затрудняет понимание того, что вы находитесь в блоке экземпляра класса.
С другой стороны, префикс каждого метода с помощью self.
и смешивание с методами экземпляра также является плохой идеей, как вы знаете все методы класса при чтении кода.
Выберите идиому, которую вы предпочитаете для своей собственной базы кода, но если вы работаете над проектом с открытым исходным кодом или работаете с другим кодом, используйте правило форматирования кода.