2010-05-21 29 views
5

Tengo este código de fragmentos que genera una firma para POST. El detalle no es importante, pero lo que quiero saber es que, dado que no se trata de un fragmento de código relacionado con el modelo, realmente se puede usar en cualquier lugar: en controladores, en modelos, en ayudantes de visualización; incluso en vistas Así que no estoy seguro de dónde y, aún más grande de un problema, cómo activar su uso una vez que lo coloco en algún lugar.¿Dónde poner fragmentos de código en Rails?

¿De eso se tratan esas afirmaciones "require"? ¿Que puede adquirir alguna funcionalidad a través de una declaración "require" en el archivo actual en el que está trabajando?

Sólo para que tenemos un ejemplo de que hablar, por ejemplo, tengo un pequeño fragmento de código que no cubicación:

def cube_it(num) 
    num**3 
end 

sé que lo va a utilizar en varios lugares a través de la aplicación, Entonces, ¿dónde debería ponerlo? y cuando necesito usarlo, ¿cómo puedo "convocarlo"?

Gracias

módulos y clases

Respuesta

2

Rieles autoloads cuando se utilizan por primera vez. Puede poner su función en un módulo (o clase) y colocar el archivo en el directorio lib de su aplicación. Las declaraciones require no se usan con frecuencia en las aplicaciones de Rails.

+0

Gracias por su respuesta Alex --- digamos que hice una llamada a un archivo maths.rb, entonces lo puse en el directorio "lib"? y después de eso puedo llamar a cube_it desde cualquier lugar? –

+0

@Nik: sí, simplemente colócalo en el directorio lib. Si coloca cube_it en un módulo, el módulo se cargará automáticamente. Aunque no lo he intentado con funciones simples. –

+0

Bien, hice un archivo lib/maths.rb. y en ella, es simplemente: clase de matemáticas def cube_it (n) n ** 3 final final Pero cuando cargo el guión/consola y trató cube_it (3), se dice que no hay error método. I trataron módulo Maths def cube_it (n) n ** 3 extremo extremo y sin suerte. ---- solo un segundo, en la consola, hice un "include Maths", ¡luego funcionó! ¿Pero mencionó que se cargó automáticamente? –

4

Sugeriría poner su código dentro de un módulo llamado Math en lib/math.rb.

math.rb
module Math 
    class << self 
    def cube_it(num) 
     num*3 
    end 
    end 
end 

No es necesario ningún requieren declaraciones con este rieles (lo hace por usted) y se puede llamar fácilmente con Math.cube_it("Hi").

Hay otras maneras de agregar código a una aplicación de rieles, pero esta es la mejor manera.

+0

Ya veo. gracias Samuel –

+0

Esto no parece funcionar para mí. Cuando uso mi propio módulo obtengo 'ModuleName' sin inicializar y con el archivo math.rb exacto y las cosas que tengo obtengo para 'Math.cube_it (3)' la respuesta: 'método indefinido 'cube_it' para Math: Module' – Mikey

Cuestiones relacionadas