2013-07-18 12 views

Odpowiedz

41

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.

+0

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

+0

niesamowita odpowiedź dziękuję bardzo, bardzo mi pomogłeś – SsouLlesS

+0

Miałem to samo pytanie. Świetne wyjaśnienie. Dzięki. – whitehat

4

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.

0

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ą.

0

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

Powiązane problemy