web-dev-qa-db-fra.com

Comment exécuter `Rails generate scaffold` quand 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 "Movie". J'ai ensuite commencé à le définir plus en détail, en ajoutant quelques méthodes, etc.

Je réalise maintenant que j'aurais dû le générer avec Rails generate scaffold pour connecter des éléments tels que le routage, les vues, le contrôleur, etc.

J'ai essayé de générer l'échafaudage, mais une erreur s'est produite indiquant qu'un fichier de migration portant le même nom existait déjà.

Quel est le meilleur moyen pour moi de créer un échafaudage pour mon "film" maintenant? (en utilisant Rails 3)

322
Lan

TL; DR: Rails g scaffold_controller <name>

Même si vous avez déjà un modèle, vous pouvez toujours générer les fichiers de contrôleur et de migration nécessaires à l'aide de l'option Rails generate. Si vous exécutez Rails generate -h, vous pouvez voir toutes les options disponibles.

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, voir scaffold_controller. Juste pour la clarté, voici la description à ce sujet:

Remplace un contrôleur échafaudé et ses vues. Transmettez le nom du modèle, CamelCased ou under_scored, et une liste de vues en tant qu'arguments. Le nom du contrôleur est récupéré sous la forme d'une version plurielle du nom du modèle.

Pour créer un contrôleur dans un module, spécifiez le nom du modèle sous la forme d'un chemin, par exemple 'parent_module/controller_name'.

Cela génère une classe de contrôleur dans app/controllers et appelle des générateurs d’aide, de moteur de template et de cadre de test.

Pour créer votre ressource, vous utiliseriez le générateur resource, et pour créer une migration, vous pouvez également voir le générateur migration (voyez, il existe un motif pour toutes ces folies). Ceux-ci fournissent des options pour créer les fichiers manquants pour construire une ressource. Sinon, vous pouvez simplement exécuter Rails generate scaffold avec l'option --skip pour ignorer tous les fichiers existants :)

Je recommande de passer un peu de temps à regarder les options à l'intérieur des générateurs. À mon avis, ils ne sont pas très bien documentés dans les livres, mais ils sont très utiles.

578
Lee Jarvis

Excellente réponse de Lee Jarvis, il ne s'agit que de la commande, par exemple; nous avons déjà un modèle existant appelé User:

Rails g scaffold_controller User
63
tokhi

Pour ceux qui démarrent une application Rails avec une base de données existante, il existe un bijou appelé 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

de votre schema.rb notre votre renommé schema.rb.cocher la case

29
frenesim

Cette commande devrait faire l'affaire:

$ Rails g scaffold movie --skip
12
Andrew Hendrie

Vous pouvez utiliser scaffold_controller et vous rappeler de passer le attributes du modèle, sinon un é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 générera 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
8
Deepak Mahakale

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, consultez échafaudage Rails

8
Nesha Zoric