2012-08-09 4 views
18

Ho letto molto sull'argomento e nulla sembra coprire le mie esigenze. Mi dispiace se sto ripetendo o poco chiaro su qualcosa Sono entrambi nuovo a Ruby e Rails e nuovo a StackOverflow.Creazione di un gioiello che contiene modelli di rotaie

Ho un'applicazione di binari esistente con molta infrastruttura al suo interno. Voglio prendere alcuni dei suoi modelli, annidarli in uno spazio dei nomi e mettere tutto questo in una gemma di rubino per l'utilizzo in altre applicazioni di binari. Da quanto ho capito, c'è un problema con i percorsi di caricamento per le rotaie in quanto sono una convenzione e un problema con la definizione di un altro motore in quanto ne hai due e si bloccano.

Sono stato alla ricerca di una guida o di un tutorial per imparare come farlo senza troppa fortuna, ma sono sicuro che c'è qualcosa là fuori se qualcuno mi può suggerire che sarebbe meraviglioso.

I miei tentativi di creare un gioiello con un motore si guastano in caso di collisione o mancanza di binari.

Sono in esecuzione rotaie 3.2.3 e rubino 1.9.3.

+1

Il problema che si sta descrivendo viene in genere risolto eseguendo il refactoring del codice su un nuovo motore Rails. Come stai cercando di creare il motore e esattamente quali errori stai ottenendo? – PinnyM

+1

Per quanto riguarda la guida, hai guardato [questo] (http://edgeguides.rubyonrails.org/engines.html) o [questo] (http://stackoverflow.com/questions/4993166/making-a- custom-plugin-gioiello-motore-per-guide-3-app)? – PinnyM

+0

Proverò a descrivere meglio cosa sto cercando di fare: Ho creato l'app di esempio per il tutorial Rails di base (il blog) con post, commenti e tag. Ora dire che voglio prendere tag e renderlo un gioiello tale che qualsiasi app Rails possa aggiungere tag su qualsiasi modello. Quello che ho provato a fare è stato creare una gemma contenente tutti i tag (modello, partial, migrazione) e installo la gemma, quindi quando la richiedo viene espulsa, ad esempio se eseguo irb (postando output in un altro commento perché I ' m fuori fuori caratteri – Shrewd

risposta

1

Inizia con questo manuale - http://guides.rubyonrails.org/engines.html

Creare un motore con comand

$ rails plugin new "EngineName" --mountable 

che mettere tutto quello che serve, modelli, i controller e.t.c in voi motore. Genera gemma da esso. Aggiungi questa gemma a MasterApp. Tutti i modelli saranno disponibili sotto lo spazio dei nomi EngineName.

+1

La domanda non è solo come creare un plug-in montabile, ma implica che le cose vengano aggiunte a tale plug-in e fatte funzionare silenziosamente in background . – Shrewd

17

Sì, è possibile creare una gemma contenente modelli e includerli in più applicazioni Rails. Questo è un modo per farlo:

  • Creare un gioiello: bundle gem demo_gem

  • Creare o spostare i modelli al demo_gem. Preferisco inserirli nella cartella lib/ della gemma come ad esempio demo_gem/lib/app/models/student.rb.

    module DemoGem 
        class Student < ActiveRecord::Base 
        end 
    end 
    
  • richiederanno tutte le vostre modelli demo_gem/lib/demo_gem.rb

    require "demo_gem/version" 
    require "demo_gem/app/models/student.rb" 
    module DemoGem 
        # Your code goes here... 
    end 
    
  • Includere la gemma nelle applicazioni Rails Gemfile (sto supponendo che il codice non è open source e non hai intenzione di pubblicare la gemma):

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

Ora è possibile utilizzare questi modelli ovunque nell'applicazione di più binari, utilizzando semplicemente DemoGem::Student.

Si presuppone qui che si stia utilizzando un singolo database e che le tabelle esistano. Tuttavia, puoi creare migrazioni nella gemma stessa e copiarle sull'app utilizzando Rails generators.