2011-01-04 17 views
24

Ho un'applicazione scritta in PHP/MySQL (symfony, per essere precisi) che vorrei (potenzialmente) piacere riscrivere in Rails. So come creare scaffolding per le tabelle che non esistono ancora, ma come faccio a far sì che Rails legga la mia struttura di tabelle esistente e crei scaffold in base a ciò?Mettere le guide su un database esistente

Aggiornamento: si scopre che posso eseguire il seguente comando per ottenere Rails per generare modelli per me:

rails generate scaffold Bank --no-migration 

Ma non mi dà forme. Preferirei qualcosa che mi dia delle forme.

risposta

28

La risposta è db:schema:dump.

http://guides.rubyonrails.org/migrations.html

+0

E quindi creare modelli corretti per quelli di loro in cui si desidera utilizzare "forme". – Krule

+0

Oh sì, ho dimenticato i moduli. Devo creare quei modelli manualmente? –

+0

Tu, dovresti creare modelli e definire relazioni in essi, quindi creare forme dove ti servono. – Krule

11

Il percorso più semplice è fingere di scrivere una nuova app con uno schema di database simile: è quindi possibile creare i propri modelli e migrazioni tenendo conto del vecchio schema, ma senza esserne limitato. In una fase successiva, è possibile creare uno script di migrazione del database per copiare tutti i vecchi dati nel nuovo schema.

Lo sto facendo adesso. Il vantaggio di questo approccio è che puoi sfruttare tutti gli strumenti e le tecniche di sviluppo rapido forniti da Rails (inclusi gli scaffold) senza essere rallentati dal tentativo di eseguire il retrofit allo stesso schema.

Tuttavia, se decidi che questo approccio non ti piace, e devi mappare i tuoi nuovi modelli alle tabelle esistenti, ci sono un certo numero di opzioni di configurazione fornite dal record attivo in cui puoi sovrascrivere la convenzione configurazione denominazione modelli e nomi mappa modello per i nomi tabelle, impostare i campi ID strano nome, ecc ad esempio:

class Mammals < ActiveRecord::Base 
    set_table_name "tbl_Squirrels" 
    set_primary_key :squirrel_id 
end 

È possibile che questo contribuirà Rails tentativo di leggere il vostro tavolo esistente, ma il successo dipenderà da quanto bene la tabella esistente le strutture corrispondono alle convenzioni di Rails. Potrebbe essere necessario fornire più informazioni di configurazione per farlo funzionare, e anche in questo caso potrebbe non funzionare.

Infine, può essere opportuno prendere in considerazione l'uso di DataMapper che credo sia più adatto ai database dismesse esistenti di ActiveRecord, perché ti permette di mappa tutto, ma naturalmente si dovrà imparare che API se si non lo so già

Problemi correlati