2010-09-24 15 views
6

Sono nuovo di Rails e sto imparando con Rails 3 in un progetto parallelo. Ci sono momenti in cui voglio scrivere del codice che non appartiene ai miei modelli o ai miei controllori - problemi relativi a un modello e/o controller, ma non voglio ingombrare nessuno dei due con i dettagli di implementazione di quello che sto scrivendo.Rails: dove inserisci il codice non di modello?

Ad esempio: un progetto che sto costruendo utilizza il sistema di autorizzazione di Janrain (RPX) in modo da poter ottenere un'autorizzazione Oauth, OpenID, Google, ecc. c'è una bella porzione di codice API che forniscono così non devo scrivere tutto da solo. questo codice non appartiene al controller di login o nel modulo utente. è un codice di autorizzazione, quindi deve essere accessibile dal controller di accesso, ma non fa parte di quel controller.

Dove inserisci questo codice? non è un codice modello. non appartiene al controller.

... grazie in anticipo.

risposta

5

Dovresti essere in grado di utilizzare la cartella lib nella directory principale (a meno che non venga modificata in Rails 3).
È possibile consultare le classi da lì senza la dichiarazione require.

+0

Beat me di 30 secondi :) +1 – Matchu

+1

Rails 3 non richiede automaticamente da lib, quindi è necessario esplicitamente. –

+0

Andrew: devo utilizzare qualcosa come Rails.root per accedere alla cartella lib? o semplicemente uso 'lib /'? –

4

Un suggerimento "comune" è quello di dire "inserisci questa roba in lib". Ma ci sono altri posti da considerare:

  1. considerare la possibilità di una sottocartella in app. Alcuni esempi includono: app/workers, app/observers, app/sweepers o qualsiasi altra cosa abbia senso per te.

  2. Considerare l'utilizzo di config/initializers per il codice di inizializzazione.

  3. Infine, e solo se quanto sopra non ha senso, è possibile utilizzare lib. Non dimenticare che puoi utilizzare le sottocartelle per evitare che si rovinino troppo.

E, una volta che le cose funzionano e sono ottimizzate, prendi in considerazione l'estrazione del codice in gemma. Vedere, ad esempio, RailsCast su Creating a New Gem with Bundler.

Problemi correlati