web-dev-qa-db-fra.com

Créer Ruby on Rails vues (uniquement) après que les contrôleurs et les modèles sont déjà créés)

J'ai obtenu un projet qui a des contrôleurs (code minimal uniquement) et des modèles, mais les vues manquent. Existe-t-il un moyen de générer les vues uniquement à l'aide d'un échafaudage ou d'un autre outil?

42
Sean
Rails g scaffold User --migration=false --skip

Le --skip signifie ignorer les fichiers qui existent déjà. (L'inverse est --force.)

Si vous ne voulez pas d'aide, --helpers=false.

Exemple de sortie après la suppression de mes vues User:

      invoke  active_record
   identical    app/models/user.rb
      invoke    test_unit
   identical      test/unit/user_test.rb
        skip      test/fixtures/users.yml
       route  resources :users
      invoke  scaffold_controller
   identical    app/controllers/users_controller.rb
      invoke    erb
       exist      app/views/users
      create      app/views/users/index.html.erb
      create      app/views/users/edit.html.erb
      create      app/views/users/show.html.erb
      create      app/views/users/new.html.erb
      create      app/views/users/_form.html.erb
      invoke    test_unit
   identical      test/functional/users_controller_test.rb
      invoke    helper
   identical      app/helpers/users_helper.rb
      invoke      test_unit
   identical        test/unit/helpers/users_helper_test.rb
      invoke  assets
      invoke    coffee
   identical      app/assets/javascripts/users.js.coffee
      invoke    scss
   identical      app/assets/stylesheets/users.css.scss
      invoke  scss
   identical    app/assets/stylesheets/scaffolds.css.scss
81
Dave Newton

C'est ce que le générateur d'échafaudage appelle en interne:

Rails g erb:scaffold User

erb est le moteur de template utilisé, vous pouvez donc également utiliser haml:scaffold.

Vous devez spécifier explicitement les champs que vous souhaitez que l'échafaudage utilise - Rails ne pas les déduit automatiquement du modèle créé. Par exemple:

Rails g erb:scaffold User firstname lastname reputation

Voir Rails g --help pour des options telles que sauter, forcer l'écrasement et les essais à sec ou generate scaffold --help pour des informations spécifiques à la génération d'échafaudages.

15
Rick Smith

"Un autre outil" ...

Que diriez-vous de pouvoir faire "script/generate view_for model_name "? :)

Il y a un petit bijou pour ça - View Mapper . Il a Ruby sur Rails 2 et 3 versions.

2
Michael Durrant

Je rencontre juste le même ton problème. Je l'ai fait. Plus de détails ci-dessous:
- Tout d'abord, je renomme le dossier views/your_model en views/your_model_bak. Afin de revenir en cas d'échec plus tard
- Ensuite, exécutez la commande

Rails g scaffold YourModel [field[:type][:index]] --skip
  • N'oubliez pas l'option --skip, elle ne créera pas de fichiers existants (contrôleur et modèle dans ce cas et quelques autres fichiers)
  • Assurez-vous que la liste [champ [: type] [: index]] est à jour

- Enfin, vous devez mettre à jour votre permis dans votre contrôleur de modèle.

Espérons que cela peut vous aider.

2
Ken Block

Une petite astuce consiste à ajouter "--no-test-framework "si vous utilisez Rspec et que vous ne souhaitez pas que des fichiers de test soient générés pour chaque vue dans les spécifications/vues

1
Dave Burke