Ответ 1
Когда вы создаете модель, вы получаете модель, а также некоторые связанные компоненты. Один из моих любимых способов объяснения таких тем, как это, это попробовать его или побудить других попробовать его, поэтому, если бы я должен был ввести команду rails generate model Foo name:string description:text
в проект Rails, я бы получил:
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
Первая строка вызывает Active Record
, которая в основном связывает вашу модель с вашей базой данных. Следующая строка создает файл миграции. Файлы миграции содержат инструкции по изменению вашей базы данных. Этот первый файл миграции создает таблицу базы данных с именем "foos", а также создает столбцы для "name" и "description".
Следующая строка делает модель самой. Модель - это в основном класс Ruby, который наследуется от Active Record. Это означает, что любые методы, которые можно вызвать в Active Record, теперь можно вызвать в вашей модели. Последние три строки в основном создают связанные тестовые файлы для вашей модели. Если вы использовали RSpec, вместо этого будут созданы файлы спецификаций.
Если ваше приложение Rails содержало только модели, у вас не было бы никакого вида, отображающего информацию на странице, и у вас не было бы инструкций, управляющих потоком информации. Ваш выбор будет состоять в том, чтобы генерировать контроллеры (которые, в свою очередь, генерируют ваши представления), или создавать эшафот, который генерирует вашу модель, представления, контроллер и записывает в файл routes.rb. Если бы я запустил rails generate scaffold foo
, я бы получил:
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
Чтобы ответить на ваш вопрос, преимущество эшафота заключается в том, что он быстрый, легкий, и все для вас предварительно настроено. Однако преимущества генерации моделей независимо от лесов (а затем, в свою очередь, создания контроллеров/представлений, где это необходимо, и записи вашего файла route.rb) заключается в том, что у вас есть намного больше контроля над вашим приложением и как он выглядит и функционирует, вы избегаете ненужный код, вы можете использовать Driven Driven Development или Test Driven Development и, возможно, другие вещи, которые кто-то может захотеть добавить.
Мой последний совет: Rails очень удобен, поэтому попробуйте экспериментировать самостоятельно. Вы можете отменить любую команду generate
с помощью соответствующей команды destroy
, поэтому, например, rails destroy scaffold Foo
удалит все файлы, сгенерированные с помощью rails generate Scaffold Foo name:string description:string
, поэтому вам не нужно беспокоиться о безвозвратном запуске проекта, экспериментируя.