2010-09-24 16 views
6

Soy nuevo en Rails y he estado aprendiendo con Rails 3 en un proyecto paralelo. Hay momentos en los que quiero escribir algún código que no pertenece a mis modelos o a mis controladores, preocupaciones relacionadas con un modelo y/o controlador, pero no quiero complicar ninguno de ellos con los detalles de implementación. de lo que estoy escribiendoRieles: ¿Dónde pones el código que no es modelo?

Por ejemplo: un proyecto que estoy construyendo utiliza el sistema de autorización de Janrain (RPX) para que pueda obtener la autorización de oauth, openid, google, etc. hay una buena porción de código API que proporcionan, así que no tengo que escribirlo todo yo mismo. este código no pertenece al controlador de inicio de sesión ni al módulo de usuario. es un código de autorización, por lo que debe ser accesible por el controlador de inicio de sesión, pero no es parte de ese controlador.

¿Dónde pones este código? no es un código modelo no pertenece al controlador.

... gracias de antemano.

Respuesta

5

Debería poder usar la carpeta lib en su directorio raíz (a menos que haya cambiado en Rails 3).
Puede consultar clases desde allí sin la declaración require.

+0

Bate por 30 segundos :) +1 – Matchu

+1

Rails 3 no requiere auto de lib, por lo que debe solicitarlo explícitamente. –

+0

Andrew: ¿necesito usar algo como Rails.root para acceder a la carpeta lib? o simplemente uso 'lib /'? –

4

Una sugerencia 'común' es decir 'poner esto en lib'. Pero hay otros lugares a tener en cuenta:

  1. considere hacer una subcarpeta en app. Algunos ejemplos incluyen: app/workers, app/observers, app/sweepers, o lo que sea lógico para usted.

  2. Considere usar config/initializers para el código de inicialización.

  3. Por último, y solo si lo anterior no tiene sentido, puede usar lib. No olvides que puedes usar subcarpetas para evitar que se vuelque demasiado.

Y, una vez que tenga las cosas funcionando y pulidas, considere extraer su código en gema. Véase, por ejemplo, RailsCast en Creating a New Gem with Bundler.

Cuestiones relacionadas