Подтвердить что ты не робот

Разница между эшафотом и моделью в Rails

В чем разница между созданием эшафота и созданием модели в Rails? Каковы преимущества/недостатки выполнения?

4b9b3361

Ответ 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, поэтому вам не нужно беспокоиться о безвозвратном запуске проекта, экспериментируя.

Ответ 2

Создание эшафота включает в себя создание модели, но также генерирует

  • маршруты RESTful
  • контроллер со всеми действиями для обработки RESTful модели
  • просмотры, необходимые контроллеру
  • тесты заглушек

Леса являются хорошим началом для новых пользователей Rails.

Ответ 3

Новые пользователи, скорее всего, будут смущены строительными лесами, поскольку они не понимают, как все компоненты работают вместе. Леса, вероятно, лучше всего для опытных пользователей, которым нужен ярлык для работы, который они обычно повторяют.