Domanda

Ho scritto un'app di rotaie che segue la normale struttura di directory (codice modello nei modelli, codice controller nei controller).

Ma ora sto lavorando a una nuova funzionalità e per questo ho scritto un po '(quello che chiamerei) " service " codice.
La nuova funzionalità consiste nell'importare alcuni dati nel sistema, al momento sono due le classi per eseguire l'importazione, ma potrebbe espandersi a più.

Non credo che il nuovo codice appartenga al modello in quanto non modella alcun oggetto (non è neppure direttamente correlato a nessun singolo oggetto. Certamente non penso che appartenga al controller perché non è una logica di presentazione.

Quindi, ho creato un " app / servizi " directory e inseriscilo. Ho anche creato un "test / servizi" directory in cui ho messo i miei test.

Tutto bene, ho pensato ma quando eseguo 'rake: test' o 'autotest' i miei nuovi test di servizi non vengono eseguiti.
Ora mi aspetto che ci sia un modo per fare in modo che il rake li raccolga, ma è un segnale di avvertimento che ho fatto qualcosa di sbagliato?
C'è qualche altro posto in cui il codice dovrebbe vivere o in qualche modo non sto facendo cose "alla maniera di Rails"?

Generalmente ogni volta che ho riscontrato un problema come questo prima di solito ho scoperto che le rotaie avevano già una soluzione, ma non ero a conoscenza della convenzione. È uno di questi casi?

È stato utile?

Soluzione

Ecco a cosa serve la cartella 'lib'.

La cartella lib si trova nel percorso cercato automaticamente, quindi puoi averla

class MyFoo
end

in lib / my_foo.rb e poi semplicemente chiamando

MyFoo.new

da un controller il codice verrà caricato senza che tu abbia bisogno di un richiedi 'my_foo'

Altri suggerimenti

./lib è sicuramente il posto dove andare.

Un altro posto dove metterlo è nella directory degli inizializzatori sotto config, a seconda di cosa stai facendo. Potresti anche considerare di trasformare il tutto in un plugin, ma se è una piccola quantità di funzionalità, probabilmente non ne vale la pena.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top