2016-10-22 1 views
0

Ich bin neu auf Ruby auf Schienen. Ich benutze Schienen 4.1.6 und was ich will, ist Protokoll aller Prozesse in einer Textdatei (like index page accessed, view page access etc..). zu machen für die ich gemeinsame Funktion erstellen möchte, in der ich meinen Text als agrs weitergeben kann, hatte ich einige R & D tun und ich fand dies: In Rails, where to put useful functions for both controllers and models, aber es scheint, dass es nicht mit aktiven Admin-Ressourcen arbeitet. Also, für aktive Admin-Controller und Modell, muss ich irgendwelche anderen Module (d. h. an anderer Stelle lassen sagen/admin /) oder irgendetwas anderes ich tun müssen?Ruby on Rails 4: Wo muss ich Common code setzen?

gibt es einen globalen Speicherort, den wir in Active Admin wie Komponente in CakePHP verwenden können.

dank

EDIT

app/admin/driver.rb

ActiveAdmin.register User, as: 'Driver' do 
    ... 
    ... 
    index :download_links => false do 
     ... 
     ... 
     #call function to maintain log something like, 
     take_note('action performed') 
    end 
+0

Können Sie näher erläutern, was der Code tut, den Sie teilen möchten und warum Sie ihn teilen müssen. IMO kann es einen großen Unterschied machen, wenn der Code für Beispiele etwas Sichtspezifisches oder Datenbereinigen tut. – spickermann

Antwort

0

Der einfachste Weg ist es, eine Datei im config/initializers Ordner erstellen - diese automatisch geladen werden.

Sie könnten es auch in application.rb schreiben, obwohl ich empfehle, nur dies für die Konfiguration zu tun.

Ein übliches Muster ist lib/ auf den Pfad automatisch geladen hinzufügen, damit alle benutzerdefinierten dort Dateien verwendet werden kann - Auto-loading lib files in Rails 4

Es ist vielleicht erwähnenswert, dass man in der Tat Zugriff auf Ihre Modelle von überall und sehen.


für Ihren Kommentar

hier ist eine generische Klasse, die Sie in lib schreiben kann/wenn Sie es auf Ihrem Autoload Pfad hinzufügen

class MyClass 
    def self.my_class_method 
    puts "i was called" 
    end 
end 

Dann sonst es von überall anrufen ...

MyClass.my_class_method 
+0

Kannst du mir bitte anhand eines kleinen Beispiels erklären, wie ich die Funktion der in lib / –

0

Eine globale Methode fühle mich wie ein Code-Geruch für mich. Stattdessen würde ich eine Note Klasse oder ein Modul erstellen. Dies verschmutzt nicht den globalen Namensraum und ist einfacher isoliert zu testen.

ich Code wie diesen in einem initializer hinzufügen würde:

# in config/initializers/note.rb 
module Note 
    def self.take(message) 
    # log `message` 
    end 
end 

Es in Ihrem Controller wie folgt verwendet werden:

index :download_links => false do 
    # ... 
    Note.take('action performed') 
end 

Bitte beachten Sie, dass Sie Ihren Server neu starten müssen, wenn Dateien ändern im Ordner config.