Das ist die gleiche wie
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
Klasse Methoden für die Klasse arbeiten (zB Post), Instanzmethoden arbeitet auf Instanzen dieser Klasse (zB Post. neu)
Einige Leute mögen die class << self; code; end;
Art und Weise, weil es alle Klassenmethoden in einem schönen Block und an einem Ort hält.
Andere bevorzugen jede Methode mit self.
, um explizit zu wissen, dass dies eine Klassenmethode und keine Instanzmethode ist. Es ist eine Frage des Stils und wie Sie programmieren. Wenn Sie alle Klassenmethoden in einen Block wie class << self
einfügen und dieser Block lang genug ist, könnte die Zeile class << self
außerhalb Ihrer Editor-Ansicht liegen, was es schwierig macht zu wissen, dass Sie sich im Klasseninstanzblock befinden.
Auf der anderen Seite ist es auch eine schlechte Idee, jeder Methode self.
voranzustellen und sie mit Instanzmethoden zu vermischen. Wie können Sie alle Klassenmethoden beim Lesen Ihres Codes kennen?
Wählen Sie ein Idiom aus, das Sie für Ihre eigene Codebasis bevorzugen. Wenn Sie jedoch an einem Open Source-Projekt arbeiten oder an einem anderen Code arbeiten, verwenden Sie deren Regel zur Codeformatierung.
search2 ist ein sehr schlechter Methodenname. –
Und auch ein Duplikat von [Rails class << self] (http://stackoverflow.com/questions/2567956/rails-class-self) und [Differenz zwischen 'self.method_name' und 'class' self 'in Ruby ] (http: // Stapelüberlauf.com/questions/2025569/difference-zwischen-self-method-name-und-klasse-self-in-ruby) und [Kann mir jemand bitte erklären << selbst zu mir?] (http://stackoverflow.com/questions/4149700/can-someone-bitte-erklären-class-self-to-me). Bitte suchen Sie, bevor Sie Fragen stellen. – Phrogz