2012-08-09 12 views
18

He estado leyendo mucho sobre el tema y nada parece cubrir mis necesidades. Lo siento si estoy repitiendo o no estoy claro sobre algo. Soy nuevo en ruby ​​and rails y nuevo en stackoverflow.Creando una gema que contiene modelos de rieles

Tengo una aplicación de rieles existente con mucha infraestructura. Quiero tomar algunos de sus modelos, anidarlos en un espacio de nombres y poner todo eso en una gema de rubí para su uso en otras aplicaciones de rieles. Según tengo entendido, hay un problema con las rutas de carga de los rieles, ya que son una convención y un problema con la definición de otro motor, ya que tiene dos y fallan.

He estado buscando una guía o tutorial para aprender a hacer esto sin mucha suerte, pero estoy seguro de que hay algo allí si alguien puede señalarme que sería maravilloso.

Mis intentos de hacer una joya con un motor fallan en colisiones o falta de rieles.

Estoy ejecutando rails 3.2.3 y ruby ​​1.9.3.

+1

El problema que está describiendo generalmente se resuelve refacturando su código a un nuevo motor de Rails. ¿Cómo intentas crear el motor y qué errores estás obteniendo exactamente? – PinnyM

+1

En cuanto a una guía, ¿has mirado [esto] (http://edgeguides.rubyonrails.org/engines.html) o [este] (http://stackoverflow.com/questions/4993166/making-a- custom-plugin-gem-engine-for-rails-3-app)? – PinnyM

+0

Trataré de describir mejor lo que trato de hacer: He creado la aplicación de muestra para el tutorial básico de Rails (el blog) con publicaciones, comentarios y etiquetas. Ahora digo que quiero tomar etiquetas y convertirlas en gemas, de modo que cualquier aplicación de Rails pueda agregar etiquetas a cualquier modelo. Lo que intenté hacer fue hacer una gema que contenga todas las etiquetas (modelo, parciales, migración) e instalé dicha gema, luego cuando la necesito me expulsan, por ejemplo, si ejecuto irb (publicando salida en otro comentario porque estoy ' m a cabo fuera de caracteres – Shrewd

Respuesta

1

de inicio con este manual - http://guides.rubyonrails.org/engines.html

Crear un motor con COMAND

$ rails plugin new "EngineName" --mountable 

Que poner todo lo que necesita, modelos, controladores e.t.c en su motor. Generar gema de ella. Añade esta joya MasterApp. Todos los modelos estarán disponibles en el espacio de nombre EngineName.

+1

La cuestión no es solo cómo hacer un complemento montable, sino que implica que las cosas se agreguen a dicho complemento y se hagan funcionar silenciosamente en el fondo . – Shrewd

17

Sí, puede crear una gema que contenga modelos e incluirlos en múltiples aplicaciones Rails. Esta es una manera de hacerlo:

  • Crear una joya: bundle gem demo_gem

  • Crear o mover sus modelos a la demo_gem. Prefiero ponerlos en lib/ carpeta de la gema como por ejemplo demo_gem/lib/app/models/student.rb.

    module DemoGem 
        class Student < ActiveRecord::Base 
        end 
    end 
    
  • Requerir que todos sus modelos en demo_gem/lib/demo_gem.rb

    require "demo_gem/version" 
    require "demo_gem/app/models/student.rb" 
    module DemoGem 
        # Your code goes here... 
    end 
    
  • Incluir la joya en nuestras aplicaciones Rails Gemfile (estoy asumiendo que su código no es código abierto y no tiene previsto publicar la gema):

    gem 'demo_gem', path: '../demo_gem' 
    

Ahora puede utilizar estos modelos en cualquier lugar en la aplicación de múltiples raíles, simplemente usando DemoGem::Student.

Se supone aquí que está utilizando una única base de datos y que las tablas existen. Sin embargo, puede crear migraciones en la gema y copiarlas a la aplicación usando Rails generators.

Cuestiones relacionadas