10 Stimmen

Wo sollte ich mein eigenes "Modul" innerhalb einer Rails-Anwendung platzieren?

Einige Funktionen innerhalb meiner Rails-Anwendung sehen besser aus, als wären sie ein separates "Modul", auf das über require zugegriffen werden sollte. Ein Beispiel hierfür ist die Funktion zur Berechnung von Fibonacci-Zahlen.

Die Funktionalität ist unabhängig von der Rails-Anwendung und kann in anderen Projekten wiederverwendet werden, daher sollte sie nicht in der Nähe von Anwendungscontrollern und -modellen gespeichert werden. Da ich sie jedoch nicht in ein separates Projekt auslagern werde, scheint es nicht das Richtige zu sein, sie in den vendor -Ordner zu platzieren.

Wo sollte ich sie dann platzieren?

6voto

Steve Graham Punkte 2961

Rails < 5

Vor Rails 5 war der richtige Ort, um wiederverwendbaren Code wie diesen abzulegen, das Verzeichnis lib. Sie müssen jedoch nichts requiren, da lib bereits im Ladepfad enthalten ist und der Inhalt während der Initialisierung geladen wird.

Wenn Sie eine vorhandene Klasse erweitern müssen, definieren Sie zuerst Ihr Modul und schließen es dann ein, indem Sie es als Nachricht an die Klasse senden, die Sie erweitern möchten, z.

module MyExtensions
  def self.included base
    base.instance_eval do
      def my_new_method
        …
      end
    end
  end
end

ActiveRecord::Base.send :include, MyExtensions

2voto

rfunduk Punkte 29395

Ich werde oft Sachen in lib legen, es stellt sich heraus, dass alles unter lib im Ladepfad ist und überhaupt nicht requiret werden muss.

Bearbeitung: Nach Steves Kommentar habe ich den Teil über das Erfordern der Dateien entfernt. Außerdem habe ich ein paar Erfordernisse aus einigen meiner Codes entfernt :P

2voto

kibitzer Punkte 4239

Es gibt ein lib Verzeichnis in RoR Projekten, das gut für diesen Zweck geeignet ist - ich platziere gemeinsame Codefragmente in Form von "Bibliotheken" dort. Alles, von der Erweiterung von ActiveRecord-Klassen bis hin zu wiederverwendbaren Hilfsmethoden.

2voto

notapatch Punkte 5608

Rails 5+

Die Antwort gilt für Rails 5 und höher. TLDR: app/lib ist jetzt die Konvention.

  • Beachten Sie, dass alle obigen Antworten vor Rails 5 geschrieben wurden.

\lib

Rails 5 rät davon ab, \lib zu verwenden. Obwohl von der Verwendung von \lib abgeraten wird, können Sie dies immer noch tun, solange Sie \lib zu den Eagerloading hinzufügen.

# config/application.rb
config.eager_load_paths << Rails.root.join('lib')

\app\lib

Das Verschachteln von lib unterhalb von app ist jetzt eine gängige Konvention, da ein beliebiges Verzeichnis von app automatisch eagerloaded wird.

Referenz

Rails-Leitfaden - Autoloaden und Eagerloaden
Stackoverflow - Verwirrung über autoload_paths vs eager_load_paths in Rails 4
Stackoverflow - Warum app-lib statt lib in Rails verwenden

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X