Generieren Sie einen Controller mit allen RESTful-Funktionen


84

Ich versuche, einen Controller mit allen RESTful-Aktionen zu generieren. Ich hatte bei Wikibooks - Ruby on Rails gelesen, dass ich nur den Generator mit dem Namen des Controllers aufrufen musste, und genau das würde ich bekommen. Also rannte ich script/generate rspec_controller Properties, bekam aber einen leeren Controller.

Alle anderen Vorschläge wäre sehr dankbar.


1
thenduks, Wenn ich so erfahren wäre wie Sie, wäre das wahr, aber ich kenne nicht einmal die 7 erholsamen Aktionen auf meinem Kopf, also müsste ich den Artikel googeln und dann zwischen der Seite und meiner hin und her wechseln App, um jeden einzutragen. Sobald ich sie kenne, stimme ich zu, dass Ihre Lösung einfacher ist
Barb

Antworten:


140

Ich weiß nichts über eine automatisierte Vorgehensweise, aber wenn Sie dies tun:

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

Alle von ihnen werden für Sie erstellt

Update für Rails 4

rails g scaffold_controller Property

7
Gute Antwort. Experten können den Rest ignorieren. Hinweis für Noobs - Wenn Sie Ihren Controller PropertyController so benennen, wie ich ihn missverstanden habe :) erhalten Sie PropertyController Controller :)
Barb

2
Meine Antwort macht genau das Gleiche - außer dass Sie nicht alle 7 Standardaktionen angeben müssen.
Konung

4
Nur eine Anmerkung ... dies generiert nur einen Controller mit Methoden, die für grundlegende CRUD-Aktionen benannt sind. Die Routen sind weit entfernt von RESTful ... zB route get "mycontroller/create"(erstellen sollte ein Beitrag sein)
rthbound

Ich würde zustimmen, dass diese Antwort eher für generische benutzerdefinierte Aktionen geeignet ist, da sie die gewünschte RESTful-Konvention nicht wirklich respektiert.
Prusswan

Diese Antwort ist für Rails 4 veraltet. Siehe Konungs Antwort für Rails 4.
Toobulkeh

97

In Rails 3 gibt es auch rails generate scaffold_controller .... Mehr Infos hier .


1
Ich bevorzuge diese Methode, da sie RESTful-Routen generiert. Die Verwendung rails g controller Foos createwürde eine Route generieren, für get '/create'die überhaupt keine REST-fähig ist.
Rthbound

37

BEARBEITEN (aufgrund einiger Kommentare) : Die ursprüngliche Frage war im Jahr 2010 - daher lautet die Antwort NICHT für SCHIENEN 4, sondern für Schienen 2 !!

versuchen Sie es mit einem Gerüst.

script/generate scaffold controller Properties

Abschnitt der offiziellen Dokumente zu Ruby On Rails

Ich bin sicher, Sie können weitere Informationen finden, wenn Sie eine Google-Suche auf Schienengerüsten durchführen. Hoffentlich hilft das.

EDIT: Für RAILS 4

rails g scaffold_controller Property


Können Sie rspec_scaffold controller Eigenschaften skripten / generieren?
Barb

ja du könntest. Hier ist eine detaillierte Info / Tutorial: blog.davidchelimsky.net/2007/05/14/…
konung

Ich vermute, dass diese Antwort für neuere Versionen von Rails veraltet ist. Es wird einfach ein ganzes Gerüst für das Objekt / Modell namens "controller" erstellt
prusswan

4
Ja, das wurde 2010 für Version 2 geschrieben. Etwas wie folgt aus Frage. Jetzt (Rails 4) würde es so aussehen: Rails g scaffold_controller-Eigenschaft (scaffold_controller würde das Gerüst aufrufen und Sie müssen den Modellnamen (Singular)
angeben

2
Ich kann überprüfen, ob dies auch rails g scaffold_controller Propertyin Rails 3.2 funktioniert. Dadurch wird ein PropertiesController mit ALLEN 7 Standard-RESTful-Aktionen und ihren jeweiligen Ansichten ohne Modell erstellt.
mkralla11

15

In Rails 4/5 erledigt der folgende Befehl den Trick für mich.

rails g scaffold_controller Property --skip-template-engine

Es wurden die Controller-Aktionen generiert, jedoch nicht die Ansicht.


9

Schienen 5.1

Startpunkt:

Sie haben ein Modell ohne Controller erstellt, noch Ansichten (zB durch: rails generate model category)

Zielsetzung:

Aktualisieren Sie es auf eine vollständige RESTful-Ressource

Befehl:

rails generate scaffold_controller category

Es steuert einen Gerüstcontroller, seine sieben RESTful-Aktionen und verwandte Ansichten ab. (Hinweis: Sie können entweder den Modellnamen CamelCased oder under_scored übergeben.)

Ausgabe:

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

7

Sie suchen ein Gerüst.

Versuchen:

script/generate scaffold Property

Dadurch erhalten Sie einen Controller, ein Modell, eine Migration und zugehörige Tests. Sie können die Migration mit der Option überspringen --skip-migration. Wenn Sie die anderen nicht möchten, müssen Sie sie selbst löschen. Machen Sie sich keine Sorgen über das Überschreiben vorhandener Dateien. Dies geschieht nur, wenn Sie diese verwenden --force.

Wie klew weist darauf hin , in den Kommentaren, definiert dies auch die Methode Körper für Sie, nicht nur die Namen. Es ist sehr hilfreich, als Ausgangspunkt für Ihren REST-Controller zu verwenden.


@Barb, ich denke Scaffolding wäre besser für dich, da es nicht nur alle Funktionen deklariert, sondern sie auch definiert. Es ist gut, sie mindestens einmal zu erstellen und sie als Beispiel zu haben.
Klew

6

In Rails 4 ist es rails g controller apps new create update edit destroy show index

Oder rails generate controller apps new create update edit destroy show indexwenn du den ganzen Begriff ausschreiben willst :).


Und für Controller mit einem längeren Namen (wie line_items), Schienen g Controller LineItems
Tommyixi

1
Sie können nur rails g scaffold_controller appsin Rails 4
wrdevos

2

script / generate rspec_scaffold Eigenschaft


und ja, mir ist klar, dass Sie bereits eine Antwort auf diese Frage akzeptiert haben, aber ich bin der Meinung, dass diese Lösung einigen Leuten helfen könnte, die diesen Beitrag auch vorlesen. Die obige Lösung erstellt ein Modell usw., das Sie einfach löschen können, wenn du brauchst nicht
stephenmurdoch

0

Es gibt keine Möglichkeit (von der ich weiß, dass sie dokumentiert ist), einen Controller außer durch ein Gerüst auszustechen. Aber du könntest tun:

script/generate controller WhateverController new create edit update destroy show

Tolle Antwort, ich denke du vermisst eine Aktion gibt es nicht 7 Aktionen?
Barb

0

Eine Lösung besteht darin, ein Skript zu erstellen, das einen Parameter, den Controller-Namen, akzeptiert, und das Skript den gesamten Befehl für Sie eingeben zu lassen.


  1. Erstellen Sie eine neue Datei, z. B. Railsgcontroller
  2. Machen Sie es ausführbar und speichern Sie es auf dem Pfad
  3. Führen Sie es wie folgt aus: $ railsgcontroller Artikel

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.