2013-08-23 13 views
7

Vorrei creare una classe di manipolazione di stringhe general purpose che possa essere utilizzata su modelli, viste e controller nella mia applicazione Rails.Rails: impossibile accedere a un modulo nella mia directory lib

In questo momento, sto tentando di inserire un modulo nella mia directory lib e sto solo cercando di accedere alla funzione nella console di rails per testarlo. Ho provato molte delle tecniche di domande simili, ma non riesco a farlo funzionare.

Nel mio file lib/filenames.rb:

module Filenames 

    def sanitize_filename(filename) 
    # Replace any non-letter or non-number character with a space 
    filename.gsub!(/[^A-Za-z0-9]+/, ' ') 

    #remove spaces from beginning and end 
    filename.strip! 

    #replaces spaces with hyphens 
    filename.gsub!(/\ +/, '-') 
    end 

    module_function :sanitize_filename 

end 

Quando provo a chiamare sanitize_filename ("una stringa"), ottengo un errore di metodo. Quando provo a chiamare Filenames.sanitize_filename ("some string"), ottengo un errore costante non inizializzato. E quando provo ad includere '/ lib/nomi di file' ottengo un errore di caricamento.

  1. È questo il modo più convenzionale per creare un metodo a cui posso accedere ovunque? Dovrei invece creare una classe?

  2. Come posso farlo funzionare? :)

Grazie!

+2

possibile duplicato di [Progettazione OO in Rails: dove inserire materiale] (http://stackoverflow.com/questions/1068558/oo-design-in-rails-where-to-put-stuff) –

+3

O possibile duplicato di [Il modo migliore per caricare la classe del modulo dalla cartella lib in Rails 3] (http://stackoverflow.com/questions/3356742/best-way-to-load-module-class-from-lib-folder-in-rails- 3) – RyanWilcox

risposta

10

Per una risposta davvero grande, guarda la risposta di Yehuda Katz citata nel commento alla tua domanda (e davvero, guarda qui).

La risposta breve in questo caso è che probabilmente non si sta caricando il file. Vedi il link che RyanWilcox ti ha dato. Puoi verificarlo inserendo un errore di sintassi nel file: se l'errore di sintassi non viene generato all'avvio dell'app (server o console), sai che il file non viene caricato.

Se pensi di caricarlo, inserisci il codice che stai utilizzando per caricarlo. Di nuovo, vedi il link che RyanWilcox ti ha dato per i dettagli. Esso include il codice, che va in uno dei vostri file di configurazione di ambiente:

# Autoload lib/ folder including all subdirectories 
config.autoload_paths += Dir["#{config.root}/lib/**/"] 

Ma in realtà, leggere la risposta di Yehuda.

Problemi correlati