2010-11-07 18 views
17

J'ai configuré mon database.yml pour pointer vers ma base de données MySQL existanterails 3: comment générer des modèles pour les tables de base de données existante

comment puis-je générer des modèles de ce?

rails generate model existing_table_name 

donne seulement un modèle emty ..

+0

vous donne un modèle vide? Qu'est-ce que ça veut dire? Qu'essayez-vous de faire? :) – s84

+0

je m'attendais à ce qu'il contienne tous les champs et relations de cette table, mais tout ce que j'obtiens est une classe vide qui dérive de ActiveRecord :: Base –

+0

ce que vous faites n'est pas possible à moins que vous ne créiez vos propres scripts. – s84

Répondre

9

Un modèle Rails ne montre pas vos champs, mais vous pouvez toujours les utiliser. Essayez ce qui suit. En supposant que vous avez un modèle nommé ModelName et un champ appelé « nom », le feu de la console Rails et tapez:

ModelName.find_by_name('foo') 

un nom qui existe dans la base de données, vous devriez voir des résultats. Cependant, Rails n'infère pas les relations, mais si votre base de données suit les conventions de Rails, elles sont facilement ajoutées.

Mise à jour

J'ai remarqué ce manque particulier d'explicitation (« magique ») est une source de confusion pour les débutants à Rails. Vous pouvez toujours regarder schema.rb pour voir les modèles et tous les champs en un seul endroit. En outre, si vous préférez voir le schéma pour chaque modèle dans le fichier modèle, vous pouvez utiliser la gemme annotate_models, qui placera le schéma db dans un commentaire en haut du fichier modèle.

+0

Wow, merci je n'ai jamais su que ça pouvait arriver! ehhe. J'apprends quelque chose de nouveau aujourd'hui. –

+0

Les modèles de rails générés affichent vos champs dans l'appel attr_accessible. – holaSenor

1

ActiveRecord n'analyse pas une définition de schéma. Il demande à la DBM pour les défauts de la table et figure les champs à la volée.

Avoir le schéma est utile si vous allez modifier les tables via des migrations. Schema Dumping and You vous aidera à l'utiliser comme référence pour la création de migrations.

ActiveRecord fait des suppositions sur le nom de table et attend qu'un champ id soit la clé primaire avec un numéro séquentiel comme type. Avoir les migrations vous aidera à refactoriser les tables et/ou les noms de champs et les types, mais vous pouvez faire la même chose via la ligne de commande de DBM. Vous n'avez pas vraiment à suivre le style d'ActiveRecord, mais cela permet d'éviter les erreurs bizarres et permet à AR de déduire des choses pour vous faciliter la vie.

1

pourrait essayer Magic Model Generator

+1

Remarque: Pour Rails 2, aucun Rails 3 n'est disponible. –

+3

Est-ce que quelqu'un connaît des méthodes alternatives qui génèrent des modèles avec des relations, etc. à partir du schéma existant dans Rails 3? – Arosboro

15

Vous pouvez Rmre. Il peut créer des modèles pour le schéma existant et il essaie de créer toutes les relations basées sur des informations de clés étrangères.

+0

J'ai essayé Rmre mais cela n'a créé que les relations entre les modèles (par exemple has_many, belongs_to). Il n'a pas créé les attributs du modèle. – Nick

3

Votre réponse est:

$ rake db:schema:dump 

qui établira un nouveau db/schema.db pour créer un schéma de votre base de données.