Comment exécuter 'rails generate scaffold' lorsque le modèle existe déjà?
Je suis nouveau sur Rails donc mon projet actuel est dans un état étrange.
L'une des premières choses que j'ai générées était un modèle "Film". J'ai ensuite commencé à le définir plus en détail, ajouté quelques méthodes,etc.
Je réalise maintenant que j'aurais dû le générer avec rails generate scaffold
pour brancher des choses comme le routage, les vues, le contrôleur, etc.
J'ai essayé de générer l'échafaudage mais j'ai eu une erreur disant qu'un fichier de migration avec le même nom existe déjà.
Quelle est la meilleure façon pour moi de créer un échafaudage pour mon "film" maintenant? (en utilisant rails 3)
6 réponses
TL;DR: rails g scaffold_controller <name>
Même si vous avez déjà un modèle, vous pouvez toujours générer le contrôleur nécessaire et les fichiers de migration en utilisant l'option rails generate
. Si vous exécutez rails generate -h
, vous pouvez voir toutes les options disponibles pour vous.
Rails:
controller
generator
helper
integration_test
mailer
migration
model
observer
performance_test
plugin
resource
scaffold
scaffold_controller
session_migration
stylesheets
Si vous souhaitez générer un échafaudage de contrôleur pour votre modèle, consultez scaffold_controller
. Juste pour plus de clarté, voici la description à ce sujet:
Tronque un contrôleur échafaudé et ses vues. Passez le nom du modèle, soit CamelCased ou under_scored, et une liste de vues comme arguments. Le nom du contrôleur est récupéré en tant que version pluralisée du modèle nom.
Pour créer un contrôleur dans un module, spécifiez le nom du modèle chemin comme 'parent_module / controller_name'.
Cela génère une classe de contrôleur dans app / controllers et appelle helper, moteur de modèle et générateurs de cadre de test.
Pour créer votre ressource, utilisez le resource
générateur, et pour créer une migration, vous pouvez également voir le générateur migration
(Voir, il y a un modèle à toute cette folie). Ceux-ci fournissent des options pour créer les fichiers manquants pour construire une ressource. Alternativement, vous pouvez simplement exécuter rails generate scaffold
avec --skip
option pour ignorer tous les fichiers qui existent :)
Je recommande de passer du temps à regarder les options à l'intérieur des générateurs. Ils sont quelque chose que je ne pense pas être très bien documenté dans les livres et autres, mais ils sont très pratiques.
Excellente réponse par Lee Jarvis
, c'est juste la commande par exemple; nous avons déjà un modèle existant appelé User:
rails g scaffold_controller User
Pour ceux qui démarrent une application rails avec une base de données existante, il existe une gemme intéressante appelée schema_to_scaffold
pour générer un script d'échafaudage.
il produit:
rails g scaffold users fname:string lname:string bdate:date email:string encrypted_password:string
À Partir de votre schema.rb
notre renommé schema.rb.
Vérifier
Cette commande devrait faire l'affaire:
$ rails g scaffold movie --skip
Vous pouvez utiliser scaffold_controller
et n'oubliez pas de passer le attributes
du modèle, ou l'échafaudage sera généré sans les attributs.
rails g scaffold_controller User name email
# or
rails g scaffold_controller User name:string email:string
Cette commande va générer les fichiers suivants:
create app/controllers/users_controller.rb
invoke haml
create app/views/users
create app/views/users/index.html.haml
create app/views/users/edit.html.haml
create app/views/users/show.html.haml
create app/views/users/new.html.haml
create app/views/users/_form.html.haml
invoke test_unit
create test/controllers/users_controller_test.rb
invoke helper
create app/helpers/users_helper.rb
invoke test_unit
invoke jbuilder
create app/views/users/index.json.jbuilder
create app/views/users/show.json.jbuilder
Dans Rails 5, vous pouvez toujours exécuter
$rails generate scaffold movie --skip
Pour créer tous les fichiers d'échafaudage manquants ou
rails generate scaffold_controller Movie
Pour créer le contrôleur et afficher uniquement.
Pour une meilleure explication découvrez rails échafaudage