Pour recréer le schéma de la base de données, cela prendra pas mal de temps.
Vous pouvez obtenir beaucoup d'informations sur la base de données dans le répertoire app/models, app/controllers app/views.
Vous devez savoir qu'ActiveRecord n'est pas vous obligent à énumérer explicitement tous les attributs d'un modèle. Ceci a des implications importantes - vous pouvez seulement déduire quels attributs vous devez encore ajouter à la base de données, en fonction de la référence à un attribut ! Cela signifie que ce travail sera un peu un ART. Et il n'y a pas d'étapes CLAIRES pour accomplir ce travail. Mais vous trouverez ci-dessous quelques règles que vous pouvez utiliser pour vous AIDER.
Il s'agit d'un projet de grande envergure. Vous trouverez ci-dessous des directives, des règles et des conseils pour vous aider. . Mais soyez conscient que cela peut prendre un long temps, et être frustrant parfois pour y parvenir.
Les tables dont vous avez besoin :
Chaque table aura normalement un ActiveRecord::Base modèle. Donc dans le répertoire app/models, vérifiez chaque fichier, et si la classe hérite de ActiveRecord::Base, c'est une table supplémentaire.
Le nom de la table est par défaut une version pluralisée en casse serpentine du nom de la classe.
class UserGroup < ActiveRecord::Base # for this class
le nom de la table est user_groups. Remarquez qu'il s'agit d'un pluriel, et qu'au lieu d'être en minuscules, il est en minuscules, avec des traits de soulignement pour séparer les mots.
Toutes ces tables auront une colonne entière "id". Par défaut, les tables ont également une colonne "created_at", et "updated_at" de type datetime.
Associations et clés étrangères :
Vous pouvez déduire quelles clés étrangères existent par les associations dans les modèles. Toutes les associations sont explicitement listées, donc ce n'est pas trop difficile.
Par exemple :
class UserGroup < ActiveRecord::Base # for this class
belongs_to :category
Cela signifie que la table user_groups possède une colonne nommée "category_id", qui est une clé étrangère pour la table categories.
Cela signifie que le modèle de catégorie a probablement une relation inverse (mais pas de colonne supplémentaire) :
class Category < ActiveRecord::Base
has_many :user_groups
La principale autre association est l'association has_many_and_belongs_to. Par exemple.
class A < ActiveRecord::Base
has_and_belongs_to_many :bs
end
class B < ActiveRecord::Base
has_and_belongs_to_many :as
end
Cela signifie qu'il y a une table de jonction à ajouter appelée "as_bs" (as et bs sont triés par ordre alphabétique), avec les clés étrangères "a_id" et "b_id".
Toutes les clés étrangères sont des entiers.
Attributs
Ok, donc c'est les associations de tables. Maintenant pour les attributs normaux...
Vous devez vérifier le app/views/user_groups/ ou autre similaire app/views les répertoires.
À l'intérieur, vous trouverez les modèles de vue. Vous devriez regarder les modèles _form.html.erb (en supposant qu'il s'agit de modèles .erb, sinon il pourrait s'agir de modèles .haml, etc.)
Le modèle _form.html.erb, s'il existe, comportera normalement un grand nombre des attributs répertoriés comme champs de formulaire.
Dans le form_for
vérifiez s'il indique quelque chose comme f.text_field :name
Si le nom de la table est "nom", cela signifie qu'il existe un attribut (une colonne dans la table) appelé "nom". Vous pouvez déduire le type de colonne à utiliser en fonction du type de champ. Par exemple, dans ce cas, il s'agit d'une chaîne de caractères, donc peut-être qu'un VARCHAR(255) est approprié (appelé chaîne de caractères dans Rails).
Vous pouvez également être amené à déduire le type approprié sur la base du nom de l'attribut (par exemple, s'il mentionne quelque chose comme :time, il est probablement de type Time ou DateTime).
Cela peut vous donner tous les autres attributs du tableau. Mais dans certains cas, les attributs peuvent vous manquer. Si vous trouvez une référence à d'autres attributs dans le contrôleur, par exemple app/controllers/user_groups_controller.rb, alors vous devez l'ajouter comme colonne dans votre table. Vous pouvez laisser cela jusqu'à la fin lorsque vous le testez, parce que lorsque vous le testez, si un attribut est manquant, alors il va jeter un NoMethodError pour l'objet du modèle pertinent. Par exemple, s'il est dit que la variable @user_group, de la classe UserGroup, n'a pas de méthode nommée title, alors il lui manque probablement une colonne nommée "title" de type string.
Recréez votre migration/base de données
Ok, maintenant vous savez ce que les tables de la base de données et les noms et types de colonnes doivent être.
Vous devez générer/créer une migration pour votre base de données.
Pour ce faire, il suffit d'utiliser la commande rails generate migration RecreateTables
.
Ensuite, vous devriez trouver un fichier dans db/migrate/???_recreate_tables.rb
.
A l'intérieur, commencez à écrire du code ruby pour créer vos tables. La référence pour ceci peut être trouvée à http://guides.rubyonrails.org/migrations.html .
Mais essentiellement, vous aurez quelque chose comme :
class RecreateTables < ActiveRecord::Migration
def up
create_table :user_groups do |t|
t.string :name # adds a string (VARCHAR) column called "name"
t.text :description # adds a textarea type column called "description
t.timestamps # adds both "created_at" and "updated_at" columns for you
end
end
def down
drop_table :products # this is the reverse commands to undo stuff in "up"
end
end
Pour recréer votre Gemfile :
Commencez par ajouter un Gemfile par défaut. Cela peut être fait en utilisant rails new testapplication
quelque part pour créer une application rails vide. Copiez ensuite le Gemfile dans votre application réelle. Il vous permettra de démarrer en incluant rails et d'autres gemmes courantes.
Il est TRÈS difficile de déterminer exactement quelles gemmes sont nécessaires. Le mieux que vous puissiez faire est d'essayer de les ajouter une par une en parcourant le code.
Ici aussi, les erreurs MethodNotFound sont vos amies. Lorsque vous testez l'application, en fonction des gemmes que vous avez ajoutées, il se peut qu'elle détecte des méthodes manquantes qui pourraient être fournies par des gemmes. Certaines méthodes manquantes sur les modèles peuvent indiquer des gemmes manquantes (ou elles peuvent indiquer des champs/colonnes manquants dans la base de données). Cependant, les méthodes manquantes sur les classes Controller ou ActiveRelation sont TRÈS probablement dues à des gemmes manquantes.
Vous devrez examiner le code et essayer d'en déduire les gemmes à ajouter.
S'il utilise des méthodes comme can
, can?
et possède un fichier app/models/ability.rb
alors vous devez gem 'cancan'
. S'il appelle devise
dans un modèle, il faut gem 'devise'
. De nombreuses pierres précieuses communes peuvent être vues à http://ruby-toolbox.com .
Après avoir ajouté des gemmes à votre Gemfile, vous devriez exécuter bundle
sur votre ligne de commande pour installer les nouvelles gemmes avant de tester à nouveau. Lorsque vous testez à nouveau, vous devez redémarrer votre serveur de test. Redémarrer bundle exec rails server
pour démarrer un serveur de test local sur localhost:3000
ou quelque chose comme ça.
Vous pouvez simplement copier le fichier Rake à partir de rails new testapp
et il sera probablement comprennent tout ce dont vous avez besoin.
Tests manquants
Le répertoire test/ manquant n'est pas pertinent pour votre application réelle. Il n'est pas nécessaire pour exécuter l'application. Cependant, il contient des scripts automatiques pour tester votre application. Vous devrez réécrire de nouveaux tests si vous voulez tester automatiquement votre application. Cependant, dans le but de remettre votre application en marche, vous pouvez l'ignorer pour le moment.
Répertoire des fournisseurs manquant
Certains codes supplémentaires ne sont pas installés comme une gemme, mais comme un plugin. Tout ce qui est installé en tant que plugin est perdu si vous n'avez pas le répertoire du vendeur. Comme pour les gemmes, le mieux que vous puissiez faire est d'essayer de déduire ce qui pourrait être manquant, et de retélécharger le plugin manquant, soit en réinstallant le plugin, soit en utilisant une gemme de remplacement.
Conseils supplémentaires :
-
Essayez de lire certains des commentaires qui pourraient vous donner le nom de certaines des pierres précieuses utilisées.
-
Si une méthode ou un ensemble de méthodes sont manquantes, et que vous pensez que ce ne sont pas des champs/colonnes de la base de données, cela peut être dû à une gemme manquante. La meilleure chose à faire est de rechercher ces noms de méthodes sur Google. Par exemple, s'il manque "paginate", vous pouvez rechercher "rails paginate gem", et voir de quelles gemmes vous pourriez avoir besoin. Dans cet exemple, vous trouverez probablement "will_paginate" et "kaminari". Ensuite, vous devez essayer de déduire lesquelles de ces gemmes sont nécessaires. Faites peut-être un grep will_paginate app -r
sur la ligne de commande pour voir s'il utilise will paginate. La commande grep recherche la chaîne "will_paginate", dans le répertoire appelé "app", -r lui fait faire cela récursivement pour tous les fichiers