То есть так же, как
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. новый)
Некоторые люди любят путь class << self; code; end;
, потому что он держит все методы уровня уровня в хорошем блоке и в одном месте.
Другие предпочитают префикс каждого метода self.
, чтобы явно знать, что это метод класса, а не метод экземпляра. Это вопрос стиля и того, как вы кодируете. Если вы поместите все методы класса в блок, например class << self
, и этот блок достаточно длинный, строка class << self
может оказаться вне вашего вида редактора, что затрудняет понимание того, что вы находитесь в блоке экземпляров класса.
С другой стороны, префикс каждого метода с self.
и смешивание с методами экземпляра также является плохой идеей, как вы знаете все методы класса при чтении кода.
Выберите идиому, которую вы предпочитаете для своей собственной базы кода, но если вы работаете над проектом с открытым исходным кодом или сотрудничаете с чужим кодом, используйте правило форматирования кода.
search2 - очень плохое имя метода. –
А также дубликат [Rails class << self] (http://stackoverflow.com/questions/2567956/rails-class-self) и [Разница между «self.method_name» и «class << self» в Ruby ] (HTTP: // StackOverflow.com/questions/2025569/difference-between-self-method-name-and-class-self-in-ruby) и [Может кто-нибудь объяснить класс << self мне?] (http://stackoverflow.com/questions/4149700/может-кто-то пожалуйста, объясните-класс-я-к-я). Перед отправкой вопросов, пожалуйста, выполните поиск. – Phrogz