Jaka jest różnica między generowaniem rusztowania a generowaniem modelu w Railsach? Jakie są zalety/wady takiego postępowania?Różnica między rusztowaniem a modelem w szynach
Odpowiedz
Podczas generowania modelu otrzymuje się model, a także niektóre powiązane komponenty. Jeden z moich ulubionych sposobów wyjaśniania zagadnień jak to jest faktycznie go wypróbować lub zachęcić innych, aby spróbować, więc gdybym wprowadź polecenie rails generate model Foo name:string description:text
ramach projektu Rails, chciałbym uzyskać:
invoke active_record
create db/migrate/20130719012107_create_foos.rb
create app/models/foo.rb
invoke test_unit
create test/unit/foo_test.rb
create test/fixtures/foos.yml
Pierwszy linia wywołuje Active Record
, która zasadniczo wiąże twój model z bazą danych. Następny wiersz tworzy tak zwany plik migracji. Pliki migracji zawierają instrukcje dotyczące zmiany bazy danych. Ten pierwszy plik migracji tworzy tabelę bazy danych o nazwie "foos", a także tworzy kolumny "nazwa" i "opis".
Następna linia tworzy sam model. Model jest w zasadzie klasą Ruby dziedziczącą po aktywnym rekordzie. Oznacza to, że wszelkie metody, które można wywoływać w Active Record, można teraz wywoływać w modelu. Ostatnie trzy linie w zasadzie tworzą powiązane pliki testowe dla twojego modelu. Jeśli korzystasz z protokołu RSpec, zostaną utworzone pliki spec.
Jeśli Twoja aplikacja Rails zawiera tylko modele, nie będziesz mieć żadnego widoku wyświetlającego informacje na stronie, ani nie będziesz mieć instrukcji sterujących przepływem informacji. Twoje wybory to również generowanie kontrolerów (które z kolei generuje twoje widoki) lub generowanie rusztowania, które generuje twój model, widoki, kontroler i zapisuje do pliku routes.rb. Gdybym prowadził rails generate scaffold foo
chciałbym uzyskać:
invoke active_record
create db/migrate/20130719013307_create_foos.rb
create app/models/foo.rb
invoke test_unit
create test/unit/foo_test.rb
create test/fixtures/foos.yml
invoke resource_route
route resources :foos
invoke scaffold_controller
create app/controllers/foos_controller.rb
invoke erb
create app/views/foos
create app/views/foos/index.html.erb
create app/views/foos/edit.html.erb
create app/views/foos/show.html.erb
create app/views/foos/new.html.erb
create app/views/foos/_form.html.erb
invoke test_unit
create test/functional/foos_controller_test.rb
invoke helper
create app/helpers/foos_helper.rb
invoke test_unit
create test/unit/helpers/foos_helper_test.rb
invoke assets
invoke coffee
create app/assets/javascripts/foos.js.coffee
invoke scss
create app/assets/stylesheets/foos.css.scss
invoke scss
identical app/assets/stylesheets/scaffolds.css.scss
Aby odpowiedzieć na to pytanie, zaletą jest to, że rusztowanie jest szybkie, łatwe i wszystko jest wstępnie skonfigurowane dla Ciebie. Jednak korzyści wynikające z generowania modeli niezależnie od rusztowań (a następnie generowania kontrolerów/widoków w razie potrzeby i pisania pliku routes.rb) polegają na tym, że masz większą kontrolę nad swoją aplikacją oraz jej wyglądem i funkcjami. niepotrzebny kod, możesz zastosować rozwój oparty na zachowaniu lub rozwój oparty na testowaniu i prawdopodobnie inne rzeczy, które ktoś może chcieć dodać.
Moja ostatnia rada: Rails jest bardzo przyjazny dla użytkownika, więc spróbuj samemu eksperymentować. Możesz cofnąć każdą komendę generate
za pomocą odpowiedniej komendy destroy
, więc na przykład rails destroy scaffold Foo
usunie wszystkie pliki wygenerowane przez rails generate Scaffold Foo name:string description:string
, więc nie musisz się martwić o nieodwracalne zepsucie projektu przez eksperymentowanie.
Generowanie rusztowania obejmuje generowanie modelu ale również generuje
- relaksującego trasy
- kontroler ze wszystkimi działaniami na relaksującego obsługi modelu
- poglądów potrzebne kontrolera
- testy stubs
Rusztowanie to dobry początek dla nowych użytkowników Rails.
Nowi użytkownicy najprawdopodobniej będą zdezorientowani przez rusztowanie, ponieważ nie rozumieją, jak działają wszystkie elementy. Rusztowanie jest prawdopodobnie najlepsze dla doświadczonych użytkowników, którzy potrzebują skrótu do pracy, który zazwyczaj powtarzają.
Z
$rails generate scaffold <name>
można automatycznie wygenerować gotowy do użycia kontrolera, model i widoki z pełnym CRUD (Create, Read, Update, Delete) interfejsu WWW. Jest to o wiele prostsze i szybsze niż generowanie modeli, ale kod, który generuje, raczej nie będzie idealny dla twojej aplikacji.
A scaffold doskonale sprawdza się w prostych przykładach, szybkich makietach i testach.
Jeśli zmienisz zdanie i zdecydujesz się skorzystać z rusztowania po już generowania modelu, zawsze można uruchomić
$rails generate scaffold <name>
To stworzy wszystkie brakujące pliki. Lub jeśli jesteś ot zadowolony z wykorzystaniem rusztowania, zawsze można usunąć go w następujący sposób:
Generowanie rusztowania:
$rails generate scaffold Story
przypadku migracji plików, wykonać rollback:
$rake db:rollback
zniszczyć lub Cofnij rusztowania: $ szyny zniszczyć rusztowania Story
- 1. Różnica między wymownym modelem a modelem?
- 2. Różnica między @Modelem i @modelem
- 3. Różnica między ciągiem a tekstem w szynach?
- 4. Jaka jest różnica między modelem widoku a obiektem przesyłania danych?
- 5. Jaka jest różnica między modelem domeny i modelem koncepcyjnym?
- 6. Różnica między obiektem a *?
- 7. Różnica między jquery a $
- 8. Różnica między oryginalnym Xgboost a sklearn XGBClassifier
- 9. w MVC, gdzie narysujesz linię między kontrolerem a modelem?
- 10. Jaka jest różnica między "Modelem" a "Kontekstem" w żargonie Entity Framework?
- 11. Jena/ARQ: Różnica między modelem, wykresem i zestawem danych
- 12. Różnica między String [] a i String ... a
- 13. Różnica między DataSource a DataSet
- 14. Różnica między mapą a dyktowaniem
- 15. Różnica między systemem a shell_exec
- 16. Różnica między% 5B% a% 5B0%?
- 17. Różnica między wysokością a tłumaczeniemZ
- 18. Różnica między Redis a kafka
- 19. Różnica między content_main.xml a activity_main.xml?
- 20. Różnica między File.Copy a File.Move
- 21. różnica między __u8 a uint8_t
- 22. Różnica między CCNode a CCLayer?
- 23. Różnica między IPFS a Filecoin?
- 24. Różnica między hash_map a unordered_map?
- 25. Różnica między prędkością a AppFabric
- 26. Różnica między kodowaniem a sortowaniem?
- 27. Różnica między Invoke a DynamicInvoke
- 28. Różnica między WhitespaceTokenizerFactory a StandardTokenizerFactory
- 29. Różnica między DataContractSerializer a XmlSerializer
- 30. Różnica między transakcją a transakcjąScope
powinienem też zachęca się postaraj się przeczytać któregokolwiek z oficjalnych poradników Railsowych na te tematy ... Dostarczyłem całkiem ogólny przegląd rzeczy takich jak aktywny zapis i migracje, ale mam nadzieję, że wystarczy jeden, aby odpowiedzieć na twoje pytanie! – aceofbassgreg
niesamowita odpowiedź dziękuję bardzo, bardzo mi pomogłeś – SsouLlesS
Miałem to samo pytanie. Świetne wyjaśnienie. Dzięki. – whitehat