2011-08-04 11 views
5

Actualmente estoy tratando de desarrollar mi primera gema ruby ​​y ya estoy atascado. Usé el comando "bundle gem" para crear la estructura básica y leer algunos tutoriales, pero lo que no puedo encontrar es cómo integrar ActiveRecord.Ruby Gem Development - Cómo utilizar ActiveRecord?

¿Dónde creo mis migraciones?

¿Creo la carpeta "db/migrations" dentro de la carpeta lib o en la raíz?

Y qué tengo que hacer nada en el Rakefile (He encontrado algunas preguntas donde la respuesta fue algo así como "lo que tiene que crear su propio [my_gem]: db: migrate". O algo así)

Todo lo que necesito es una forma de crear una joya, que defina los modelos de ActiveRecord (incluidas las migraciones, por supuesto), que luego pueden ser utilizados por una aplicación de rieles.

¡Cualquier ayuda en eso sería muy apreciada!

Saludos, Flo

Respuesta

6

Al construir una gema para integrar con un proyecto de rieles, desea construir un motor de rabietas. Si está utilizando rieles 3.0.x, utilice enginex, si está utilizando rieles 3.1 debe ser utilizar el nuevo generador:

rails g plugin new your-plugin-name 

Luego, dentro de su joya, sólo puede definir modelos, dentro de la carpeta y app/models/ ellos serán recogidos automáticamente.

Migraciones es algo más difícil: para los rieles 3.1 está bien si los defines en la carpeta correcta, en los rieles 3.0 tendrás que generar manualmente una tarea para copiar las migraciones a tu código base. Compruebe this link donde contesté esa misma pregunta.

Para obtener más información sobre los motores de rieles, marque this y this article.

+3

Esta publicación es engañosa, la pregunta se refiere al uso de modelos de registros activos y migraciones de una gema. * No * es necesario usar Rails para hacer esto. Tengo un servicio web basado en sinatra que quiero usar gem-ify para que toda la configuración se pueda indicar externa al paquete de gem de servicio. Este es solo un ejemplo de muchos escenarios alternativos donde asumir que los rieles no funcionan. – johnmartirano

+0

En la pregunta, se establece claramente que la gema debe definir los modelos que se pueden utilizar en una aplicación de rieles. – nathanvda

+1

"Can" es diferente de "must". El OP tal vez solo haya estado interesado en Rails, pero alguien más que venga y lo lea podría estar interesado en una gema que funcione tanto con Rails como con Sinatra, por ejemplo. –

3

conseguir la funcionalidad de ActiveRecord se puede hacer por:

require "rubygems" 
require "active_record" 

class User < ActiveRecord::Base 

end 

Esto debería funcionar.

+0

eche un vistazo a este proyecto, que es una pequeña extensión de ActiveRecord: https://github.com/phoet/scoped_validations – phoet

+0

@phoet Ese enlace ya no funciona. –