Jak uruchomić „szyny generują rusztowanie”, gdy model już istnieje?

331

Jestem nowy w Rails, więc mój obecny projekt jest w dziwnym stanie.

Jedną z pierwszych rzeczy, które wygenerowałem, był model „Film”. Następnie zacząłem definiować go bardziej szczegółowo, dodałem kilka metod itp.

Teraz zdaję sobie sprawę, że powinienem to wygenerować, rails generate scaffoldaby podłączyć takie rzeczy, jak routing, widoki, kontroler itp.

Próbowałem wygenerować rusztowanie, ale wystąpił błąd, że plik migracji o tej samej nazwie już istnieje.

Jaki jest dla mnie najlepszy sposób tworzenia rusztowań dla mojego „filmu”? (za pomocą szyn 3)

Lan
źródło
1
Prawdopodobnie najlepiej jest pisać własne kontrolery oraz widoki i trasy. Dowiesz się więcej o pojęciach
Ben Aubin
1
Zgadzam się z @ penne12. Przynajmniej na początku, dopóki nie poczujesz się komfortowo z koncepcjami, abyś wiedział, co robi cały kod, który jest dla Ciebie generowany.
mydoghasworms
Nie ma to bezpośredniego znaczenia, ale jeśli kiedykolwiek zepsujesz, użyj szyn zniszczyć <etc>. Pamiętam, że to było bardzo przydatne, kiedy zaczynałem.
Helsing,
1
@BenAubin, choć jest prawdą, piękno Railsów nie polega na ciągłym pisaniu bojlerów.
Romuloux,

Odpowiedzi:

596

TL; DR :rails g scaffold_controller <name>

Nawet jeśli masz już model, nadal możesz wygenerować niezbędne pliki kontrolera i migracji, korzystając z tej rails generateopcji. Po uruchomieniu rails generate -hmożesz zobaczyć wszystkie dostępne opcje.

Rails:
  controller
  generator
  helper
  integration_test
  mailer
  migration
  model
  observer
  performance_test
  plugin
  resource
  scaffold
  scaffold_controller
  session_migration
  stylesheets

Jeśli chcesz wygenerować rusztowanie kontrolera dla swojego modelu, zobacz scaffold_controller. Dla jasności, oto opis tego:

Zwłaszcza kontroler rusztowania i jego widoki. Przekaż nazwę modelu, CamelCased lub under_scored, oraz listę widoków jako argumenty. Nazwa kontrolera jest pobierana jako pluralizowana wersja nazwy modelu.

Aby utworzyć kontroler w module, podaj nazwę modelu jako ścieżkę, np. „Moduł nadrzędny / nazwa kontrolera”.

Generuje to klasę kontrolera w aplikacjach / kontrolerach i wywołuje pomocnika, silnik szablonów i generatory ram testowych.

Aby stworzyć swój zasób, użyjesz resourcegeneratora, a do stworzenia migracji możesz także zobaczyć migrationgenerator (patrz, istnieje wzorzec całego tego szaleństwa). Zapewniają one opcje tworzenia brakujących plików w celu zbudowania zasobu. Alternatywnie możesz po prostu uruchomić rails generate scaffoldz --skipopcją pominięcia istniejących plików :)

Polecam poświęcić trochę czasu na sprawdzenie opcji wewnątrz generatorów. Są coś, co według mnie nie jest wyjątkowo dobrze udokumentowane w książkach, ale są bardzo przydatne.

Lee Jarvis
źródło
12
wow, jedna z najlepszych odpowiedzi, jakie kiedykolwiek dostałem na pytanie dotyczące programowania. dzięki!
Lan
12
Mam również istniejące modele, a tworzenie rails generate scaffold_controller MyModelnie generuje warstwy widoku, ale nie zawiera ona atrybutów modelu (kolumn tabeli) i trzeba je dodać ręcznie. Czy ktoś zna rozwiązanie tego problemu? Jestem na Railsach 3.2.8.
aaronbartell
@ aaronbartell Prosisz Railsy o wygenerowanie „kontrolera rusztowań”, który nie przejmuje się atrybutami modelu. Nie jest to zepsute, jeśli chcesz również wygenerować model, to generate scaffoldjeśli masz model, ale chcesz kontroler rusztowania i nowe atrybuty dodane do modelu, który chcesz, scaffold_generatora następnie migrationpola, które zmieniasz
Lee Jarvis
9
@Lee - Żaden aaronbartell nie pyta, dlaczego scaffold_controller nie generuje odpowiednich danych wejściowych widoku dla istniejących atrybutów modelu, który został do niego przekazany, co jest prawidłowym pytaniem ... stackoverflow.com/q/17153864/165673
Yarin
67

Świetna odpowiedź Lee Jarvis, to tylko polecenie np .; mamy już istniejący model o nazwie Użytkownik:

rails g scaffold_controller User
tokhi
źródło
10
Dziękujemy, dla tych z nas, którzy są zbyt leniwi, aby czytać akapity tekstu!
Chris Cirefice,
30

Dla tych, którzy uruchamiają aplikację railsową z istniejącą bazą danych, istnieje fajny klejnot, który jest potrzebny schema_to_scaffolddo wygenerowania skryptu rusztowania. generuje:

rails g scaffold users fname:string lname:string bdate:date email:string encrypted_password:string

od twojego schema.rbnaszego przemianowanego schema.rb. Sprawdź

frenesim
źródło
2
To świetny mały klejnot, bardzo mi pomoże! Powinny być wbudowane w Railsy!
Peter Andersson,
13

W Rails 5 nadal możesz biegać

$rails generate scaffold movie --skip

aby utworzyć wszystkie brakujące pliki rusztowań lub

rails generate scaffold_controller Movie

aby utworzyć kontroler i tylko przeglądać.

Dla lepszego wyjaśnienia sprawdź rusztowanie na szynach

Nesha Zoric
źródło
12

To polecenie powinno załatwić sprawę:

$ rails g scaffold movie --skip
Andrew Hendrie
źródło
10

Możesz wykorzystać scaffold_controlleri pamiętać o przekazaniu attributesmodelu, w przeciwnym razie rusztowanie zostanie wygenerowane bez atrybutów.

rails g scaffold_controller User name email
# or
rails g scaffold_controller User name:string email:string

To polecenie wygeneruje następujące pliki:

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
Deepak Mahakale
źródło