Eso es lo mismo que
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
Los métodos de clase trabajan en la clase (por ejemplo, Post), los métodos de instancia trabaja en instancias de esa clase (por ejemplo, correos. nuevo)
A algunas personas les gusta la forma class << self; code; end;
porque mantiene todos los métodos de nivel de clase en un bloque agradable y en un solo lugar.
A otros les gusta prefijar cada método con self.
para saber explícitamente que es un método de clase, no un método de instancia. Es una cuestión de estilo y cómo codificas. Si coloca todos los métodos de clase en un bloque como class << self
, y este bloque es lo suficientemente largo, la línea class << self
podría estar fuera de la vista del editor, lo que dificultaría saber que se encuentra en el bloque de instancia de la clase.
Por otro lado, prefijar cada método con self.
e intercalar aquellos con métodos de instancia también es una mala idea, ¿cómo se conocen todos los métodos de clase mientras se lee el código?
Elija un idioma que prefiera para su propia base de código, pero si trabaja en un proyecto de código abierto o colabora con el código de otra persona, use la regla de formato del código.
search2 es un nombre de método muy pobre. –
Y también un duplicado de [Rails class << self] (http://stackoverflow.com/questions/2567956/rails-class-self) y [Diferencia entre 'self.method_name' y 'class << self' en Ruby ] (http: // stackoverflow.com/questions/2025569/difference-between-self-method-name-and-class-self-in-ruby) y [¿Puede alguien explicar la clase << self to me?] (http://stackoverflow.com/questions/4149700/can-alguien-por-favor-explique-clase-self-to-me). Por favor busca antes de publicar preguntas. – Phrogz