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)

305
demandé sur peak 2010-12-02 12:21:41

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.

555
répondu Lee Jarvis 2017-06-14 09:49:27

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
61
répondu tokhi 2014-11-02 19:42:35

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

28
répondu frenesim 2016-02-10 08:10:38

Cette commande devrait faire l'affaire:

$ rails g scaffold movie --skip
12
répondu Andrew Hendrie 2016-02-10 08:21:14

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
7
répondu Deepak Mahakale 2016-09-20 12:46:00

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

3
répondu Nesha Zoric 2018-02-22 10:55:12