Wygeneruj kontroler ze wszystkimi funkcjami RESTful


86

Próbuję wygenerować kontroler ze wszystkimi akcjami RESTful. Czytałem na Wikibooks - Ruby on Rails, że wystarczyło zadzwonić do generatora z nazwą kontrolera i właśnie to dostałem. Więc uciekłem, script/generate rspec_controller Propertiesale mam pusty kontroler.

Wszelkie inne sugestie byłyby bardzo mile widziane.


1
thenduks, gdybym był tak doświadczony, jak ty, to byłaby prawda, ale nie znam nawet 7 relaksujących czynności na czubku głowy, więc musiałbym google, a następnie przełączać się między stroną a moim app, aby wejść do każdego z nich. Kiedy już je znam, zgadzam się, że twoje rozwiązanie jest łatwiejsze
Barb

Odpowiedzi:


143

Nie wiem o zautomatyzowanym sposobie robienia tego, ale jeśli to zrobisz:

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

Wszystkie z nich zostaną stworzone dla Ciebie

Aktualizacja dla Rails 4

rails g scaffold_controller Property

7
Świetna odpowiedź. Eksperci mogą zignorować resztę. Uwaga dla noobs - jeśli nazwiesz swój kontroler PropertyController tak, jak źle zrozumiałem :), otrzymasz PropertyController Controller :)
Barb

2
Moja odpowiedź robi dokładnie to samo - z wyjątkiem tego, że nie musisz określać wszystkich domyślnych 7 akcji.
konung

4
Tylko uwaga ... to generuje tylko kontroler z metodami nazwanymi dla podstawowych akcji CRUD. Trasy są dalekie od RESTful ... np. route get "mycontroller/create"(
Utwórz

Zgodziłbym się, że ta odpowiedź jest bardziej odpowiednia dla ogólnych niestandardowych działań, w rzeczywistości nie jest zgodna z pożądaną konwencją RESTful.
prusswan,

Ta odpowiedź jest nieaktualna dla szyn 4. Zobacz odpowiedź firmy konung dla Rails 4.
toobulkeh

97

W Rails 3 jest też rails generate scaffold_controller .... Więcej informacji tutaj .


1
Wolę tę metodę, ponieważ generuje trasy RESTful. Użycie rails g controller Foos createwygenerowałoby trasę, dla get '/create'której w ogóle nie jest RESTful.
rthbound

37

EDYCJA (z uwagi na kilka komentarzy) : Oryginalne pytanie padło w 2010 roku - stąd odpowiedź NIE dotyczy KOLEJÓW 4, ale szyn 2 !!

spróbuj użyć rusztowania.

script/generate scaffold controller Properties

Sekcja oficjalnej dokumentacji dotyczącej Ruby On Rails

Jestem pewien, że możesz znaleźć więcej informacji, wyszukując go w Google na temat rusztowań szynowych. Mam nadzieję, że to pomoże.

EDYCJA: dla KOLEJÓW 4

rails g scaffold_controller Property


czy potrafisz skryptować / generować właściwości kontrolera rspec_scaffold?
Barb

tak, mogłeś. Oto szczegółowe informacje / samouczek: blog.davidchelimsky.net/2007/05/14/...
konung

Podejrzewam, że ta odpowiedź jest nieaktualna dla najnowszych wersji Railsów. Po prostu utworzy całe rusztowanie dla obiektu / modelu o nazwie "kontroler"
prusswan

4
Tak, to zostało napisane w 2010 roku dla wersji 2., co wynika z pytania. Teraz (Szyny 4) to będzie wyglądać następująco: szyny g scaffold_controller nieruchomości (scaffold_controller byłoby powołać rusztowania i musi podać nazwę modelu (w liczbie pojedynczej), ale nie muszą)
Konung

2
Mogę sprawdzić, czy rails g scaffold_controller Propertydziała również w szynach 3.2. Spowoduje to utworzenie kontrolera PropertiesController z WSZYSTKIMI 7 domyślnymi akcjami RESTful i ich odpowiednimi widokami, bez modelu.
mkralla11

15

W Railsach 4/5 poniższe polecenie załatwia sprawę.

rails g scaffold_controller Property --skip-template-engine

Wygenerował akcje kontrolera, ale nie widok.


9

Szyny 5.1

Punkt wyjścia:

Utworzyłeś model bez kontrolera ani widoków (np. Przez: rails generate model category )

Cel:

Uaktualnij go do pełnego zasobu RESTful

Komenda:

rails generate scaffold_controller category

Wycina kontroler szkieletowy, jego siedem akcji RESTful i powiązane widoki. (Uwaga: możesz podać nazwę modelu CamelCased lub under_scored.)

Wynik:

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

Szukasz rusztowania.

Próbować:

script/generate scaffold Property

To da ci kontroler, model, migrację i powiązane testy. Możesz pominąć migrację za pomocą opcji --skip-migration. Jeśli nie chcesz innych, musisz je usunąć samodzielnie. Nie martw się o nadpisanie istniejących plików, to się nie stanie, chyba że użyjesz--force .

Jak klew podkreśla w komentarzach, to określa również metodę ciała dla Ciebie, a nie tylko nazwami. Jest to bardzo pomocne jako punkt wyjścia dla kontrolera REST.


@Barb, myślę, że Scaffolding byłby dla Ciebie lepszy, ponieważ nie tylko deklaruje wszystkie funkcje, ale także je definiuje. Dobrze jest je chociaż raz stworzyć i mieć za przykład.
klew

6

W Rails 4 to rails g controller apps new create update edit destroy show index

Lub rails generate controller apps new create update edit destroy show indexjeśli chcesz napisać cały semestr :).


A dla kontrolerów o dłuższej nazwie (np. Line_items), kontroler rails g LineItems
Tommyixi

1
Możesz po prostu użyć rails g scaffold_controller appsw Rails 4
wrdevos

2

script / generation rspec_scaffold Właściwość


i tak, zdaję sobie sprawę, że już zaakceptowałeś odpowiedź na ten temat, ale czuję, że to rozwiązanie może pomóc niektórym osobom, które przeczytają ten post ... powyższe rozwiązanie stworzy model itp., który możesz po prostu usunąć, jeśli nie potrzebujesz
stephenmurdoch

0

Nie ma sposobu (o którym wiem? To jest udokumentowane?), Aby zgasić kontroler, chyba że przez rusztowanie. Ale możesz zrobić:

script/generate controller WhateverController new create edit update destroy show

Świetna odpowiedź, myślę, że brakuje Ci akcji, czy nie ma 7 akcji?
Barb

0

Jednym z rozwiązań jest utworzenie skryptu, który akceptuje jeden parametr, nazwę kontrolera i pozwala skryptowi wpisać całe polecenie za Ciebie.


  1. Utwórz nowy plik, powiedzmy railsgcontroller
  2. Uczyń go wykonywalnym i zapisz na ścieżce
  3. Uruchom to tak: $ railsgcontroller Artykuły

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.