2013-08-12 2 views
9

Ho tabelle già create da un progetto diverso. I loro nomi sono formattati come aaa_bbb_ccc_ddd (tutti non plurale e alcune parti non sono una parola convenzione). Ho creato con successo uno schema dal database leggendo this. Ma ora devo fare i modelli reali. Ho guardato allo RMRE, ma fanno rispettare la convenzione ActiveRecord sui miei tavoli e cambiano i loro nomi, cosa che non voglio fare perché le altre app dipendono da quelle tabelle.Rails: creazione di modelli da tabelle esistenti?

Qual è il modo migliore per creare automaticamente modelli e uno schema da tabelle esistenti?

risposta

16

solo un teoria, non so come questo dovrebbe funzionare in real app:

creare models nominato come ActiveRecord convenzione richiede, ad esempio per la tabella aaa_bbb_ccc_ddd si creerà un modello AaaBbb e mappa questo modello per la vostra tabella:

class AaaBbb < ActiveRecord::Base 
    self.table_name = "aaa_bbb_ccc_ddd" 
end 

o un esempio più umano:

class AdminUser < ActiveRecord::Base 
    self.table_name = "my_wonderfull_admin_users" 
end 

Ora dovrete AaaBbb come risorsa in percorsi che significa che avrete un url del tipo:

.../aaa_bbb/... 

e se si desidera utilizzare il nome nome della tabella in url Credo che si potrebbe riscrivere il percorso:

get 'aaa_bbb_ccc_ddd/:id', "aaa_bbb#show", as: "aaa_bbb"

di nuovo, solo una teoria che potrebbe aiutarti. Non ho ancora lavorato con questi casi, ma avrei iniziato da questo.


modificare

a automatizzare la creazione del modello dal database:

https://github.com/bosko/rmre

ma penso che questo creerà modelli dalle rotaie convenzione con nomi strani che dovrete da usare come risorsa nella tua app.


Un buon modello che ho trovato su SO nel caso in cui si desidera utilizzare un nome di modello diverso dal nome della tabella:

class YourIdealModelName < ActiveRecord::Base 
    self.table_name = `actual_table_name` 
    self.primary_key = `ID` 

    belongs_to :other_ideal_model, 
    :foreign_key => 'foreign_key_on_other_table' 

    has_many :some_other_ideal_models, 
    :foreign_key => 'foreign_key_on_this_table', 
    :primary_key => 'primary_key_on_other_table' 
end 
+1

C'è un modo per automatizzare questo da uno schema.rb? Ho ~ 20 tavoli con ~ 10 colonne ciascuno. Non voler codificare nomi e attributi a mano se possibile. – Derek

+0

dovresti preoccuparti solo delle tabelle e usare le loro colonne così come sono. Non sono sicuro che tu possa modificare le colonne in qualche modo senza influire sull'altra app che funziona con questo db. A proposito di automatizzare penso a un incontro .. aggiornerò la mia risposta se trovo qualcosa di utile. – rmagnum2002

+0

oh, non stavo pensando di cambiare i nomi delle colonne.È proprio ora che non ho nemmeno un file di modelli visto che sto facendo cose all'indietro. Quindi dovrò digitare tutto incluso la roba attr_accessible', quindi vorrei che qualcosa generi automaticamente TUTTO il codice del modello per me. – Derek