Générer un contrôleur avec toutes les fonctions RESTful

86

J'essaye de générer un contrôleur avec toutes les actions RESTful stubbed. J'avais lu sur Wikibooks - Ruby on Rails que tout ce que j'avais à faire était d'appeler le générateur avec le nom du contrôleur et j'obtiendrais exactement cela. Donc, j'ai couru script/generate rspec_controller Propertiesmais j'ai un contrôleur vide.

Toute autre suggestion serait la bienvenue.

Barbillon
la source
1
thenduks, si j'étais aussi expérimenté que vous, ce serait vrai, mais je ne connais même pas les 7 actions reposantes du haut de ma tête, je devrais donc rechercher l'élément sur Google, puis basculer entre la page et mon app pour entrer dans chacun d'eux. Une fois que je les connais, je conviens que votre solution est plus simple
Barb

Réponses:

143

Je ne connais pas un moyen automatisé de le faire, mais si vous le faites:

script/generate controller your_model_name_in_plural new create update edit destroy index show

Tous seront créés pour vous

Mise à jour pour Rails 4

rails g scaffold_controller Property
Marcos Placona
la source
7
Très bonne réponse. Les experts peuvent ignorer le reste. Note à noobs - si vous nommez votre contrôleur PropertyController comme je l'ai mal compris :) vous obtiendrez PropertyController Controller :)
Barb
2
Ma réponse fait exactement la même chose - sauf que vous n'avez pas besoin de spécifier toutes les 7 actions par défaut.
konung
4
Juste une note ... cela ne génère qu'un contrôleur avec des méthodes nommées pour les actions CRUD de base. Les routes sont loin d'être RESTful ... par exemple route get "mycontroller/create"(create should be a post)
rthbound
Je conviendrai que cette réponse est plus adaptée aux actions personnalisées génériques, elle ne respecte pas réellement la convention RESTful qui est souhaitée.
prusswan
Cette réponse est obsolète pour les rails 4. Voir la réponse de konung pour les rails 4.
toobulkeh
97

Dans Rails 3, il y en a aussi rails generate scaffold_controller .... Plus d'infos ici .

gdelfino
la source
1
Je préfère cette méthode car elle génère des routes RESTful. Utiliser rails g controller Foos creategénérerait une route pour get '/create'laquelle ce n'est pas du tout RESTful.
Rthbound
37

EDIT (en raison de certains commentaires) : La question d'origine était en 2010 - donc la réponse n'est PAS pour RAILS 4, mais pour les rails 2 !!

essayez d'utiliser des échafaudages.

script/generate scaffold controller Properties

Section des documents officiels sur Ruby On Rails

Je suis sûr que vous pouvez trouver plus d'informations si vous effectuez une recherche Google sur les échafaudages de rails. J'espère que ça t'as aidé.

EDIT: Pour RAILS 4

rails g scaffold_controller Property

Konung
la source
pouvez-vous script / générer des propriétés de contrôleur rspec_scaffold?
Barb
Oui vous pourriez. Voici des informations détaillées / tutoriel: blog.davidchelimsky.net/2007/05/14/…
konung
Je soupçonne que cette réponse est obsolète pour les versions récentes de Rails. Il créera simplement un échafaudage entier pour l'objet / modèle appelé "contrôleur"
prusswan
4
Oui, cela a été écrit en 2010 pour la version 2. quelque chose comme suit de la question. Maintenant (Rails 4) cela ressemblerait à ceci: rails g propriété scaffold_controller (scaffold_controller invoquerait l'échafaudage et vous devez fournir le nom du modèle (singulier), mais ce n'est pas
obligatoire
2
Je peux vérifier que cela rails g scaffold_controller Propertyfonctionne également dans les rails 3.2. Cela créera un PropertiesController avec les 7 actions RESTful par défaut et leurs vues respectives, sans modèle.
mkralla11
15

Dans Rails 4/5, la commande suivante fait l'affaire pour moi.

rails g scaffold_controller Property --skip-template-engine

Il a généré les actions du contrôleur mais pas la vue.

pmargreff
la source
9

Rails 5.1

Point de départ:

Vous avez créé un modèle sans contrôleur, ni des vues (par exemple à travers: rails generate model category)

Objectif:

Mettez-le à niveau vers une ressource RESTful complète

Commander:

rails generate scaffold_controller category

Il stubs un contrôleur échafaudé, ses sept actions RESTful et les vues associées. (Remarque: vous pouvez transmettre le nom du modèle CamelCased ou under_scored.)

Production:

varus@septimusSrv16DEV4:~/railsapps/dblirish$ rails generate scaffold_controller category
Running via Spring preloader in process 45681
      create  app/controllers/categories_controller.rb
      invoke  erb
      create    app/views/categories
      create    app/views/categories/index.html.erb
      create    app/views/categories/edit.html.erb
      create    app/views/categories/show.html.erb
      create    app/views/categories/new.html.erb
      create    app/views/categories/_form.html.erb
      invoke  test_unit
      create    test/controllers/categories_controller_test.rb
      invoke  helper
      create    app/helpers/categories_helper.rb
      invoke    test_unit
      invoke  jbuilder
      create    app/views/categories/index.json.jbuilder
      create    app/views/categories/show.json.jbuilder
      create    app/views/categories/_category.json.jbuilder
Varus Septimus
la source
7

Vous recherchez des échafaudages.

Essayer:

script/generate scaffold Property

Cela vous donnera un contrôleur, un modèle, une migration et des tests associés. Vous pouvez ignorer la migration avec l'option --skip-migration. Si vous ne voulez pas les autres, vous devrez les supprimer vous-même. Ne vous inquiétez pas de l'écrasement des fichiers existants, cela ne se produira que si vous utilisez --force.

Comme le souligne klew dans les commentaires, cela définit également les corps des méthodes pour vous, pas seulement les noms. Il est très utile de l'utiliser comme point de départ pour votre contrôleur REST.

molf
la source
@Barb, je pense que Scaffolding serait mieux pour vous car il déclare non seulement toutes les fonctions, mais aussi les définit. Il est bon de les créer au moins une fois et de les avoir comme exemple.
klew
6

Dans Rails 4 c'est rails g controller apps new create update edit destroy show index

Ou rails generate controller apps new create update edit destroy show indexsi vous voulez écrire le terme complet :).

Tom Hammond
la source
Et pour les contrôleurs avec un nom plus long (comme line_items), rails g controller LineItems
Tommyixi
1
Vous pouvez simplement utiliser rails g scaffold_controller appsdans Rails 4
wrdevos
2

script / generate, propriété rspec_scaffold

stephenmurdoch
la source
et oui, je me rends compte que vous avez déjà accepté une réponse sur celle-ci, mais je pense que cette solution pourrait aussi aider certaines personnes qui liront cet article ... la solution ci-dessus créera un modèle, etc., que vous pouvez simplement supprimer si vous n'avez pas besoin
stephenmurdoch
0

Il n'y a aucun moyen (que je sache? Qui est documenté?) Pour stuber un contrôleur sauf à travers un échafaudage. Mais vous pouvez faire:

script/generate controller WhateverController new create edit update destroy show
rfunduk
la source
Bonne réponse, je pense qu'il vous manque une action, n'y a-t-il pas 7 actions?
Barb
0

Une solution consiste à créer un script qui accepte un paramètre, le nom du contrôleur, et à laisser le script saisir la commande entière pour vous.


  1. Créer un nouveau fichier, disons railsgcontroller
  2. Rendez-le exécutable et enregistrez-le sur le chemin
  3. Exécutez-le comme: Articles de $ railsgcontroller

die () {
    echo "Please supply new rails controller name to generate."
    echo >&2 "$@"
    exit 1
}

[ "$#" -eq 1 ] || die "1 argument required, $# provided"

rails g controller "$1" new create update edit destroy show index
philippinev
la source