Как запустить `rails generate scaffold`, когда модель уже существует?


332

Я новичок в Rails, так что мой текущий проект находится в странном состоянии.

Одной из первых вещей, которые я создал, была модель «Кино». Затем я начал определять его более подробно, добавил несколько методов и т. Д.

Теперь я понимаю, что должен был сгенерировать его rails generate scaffoldдля подключения таких вещей, как маршрутизация, представления, контроллер и т. Д.

Я попытался сгенерировать строительные леса, но я получил сообщение о том, что файл миграции с таким именем уже существует.

Какой лучший способ для меня создать леса для моего "Кино" сейчас? (используя рельсы 3)


1
Вероятно, лучше всего написать свои собственные контроллеры и представления и маршруты. Вы узнаете больше о концепциях
Бен Обин

1
Согласитесь с @ penne12. По крайней мере, в начале, пока вы не освоитесь с концепциями, чтобы вы знали, что весь код делает для вас.
mydoghasworms

Не имеет непосредственного отношения, но если вы когда-нибудь все испортите, используйте rails destroy <etc>. Я помню, это было действительно полезно, когда я начал.
Хельсинг

1
@BenAubin, хотя это правда, красота Rails заключается в том, что не нужно постоянно писать шаблон.
Ромулу

Ответы:


596

TL; DR :rails g scaffold_controller <name>

Даже если у вас уже есть модель, вы можете сгенерировать необходимый контроллер и файлы миграции, используя rails generateопцию. Если вы запустите, rails generate -hвы сможете увидеть все доступные вам опции.

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

Если вы хотите создать каркас контроллера для своей модели, см scaffold_controller. Просто для ясности, вот описание этого:

Заглушает контроллер леса и его взгляды. Передайте имя модели, CamelCased или under_scored, и список представлений в качестве аргументов. Имя контроллера извлекается как множественная версия названия модели.

Чтобы создать контроллер в модуле, укажите имя модели в виде пути, например «parent_module / controller_name».

Это генерирует класс контроллера в app / controllers и вызывает помощник, генератор шаблонов и генераторы тестовой структуры.

Чтобы создать свой ресурс, вы должны использовать resourceгенератор, а для создания миграции вы также можете увидеть migrationгенератор (видите, во всем этом безумии есть образец). Они предоставляют опции для создания отсутствующих файлов для создания ресурса. Кроме того, вы можете просто запустить rails generate scaffoldс --skipвозможностью пропустить любые файлы, которые существуют :)

Я рекомендую потратить некоторое время на поиск вариантов внутри генераторов. Они - то, что я не чувствую, документировано очень хорошо в книгах и тому подобное, но они очень удобны.


12
вау, один из лучших ответов, которые я когда-либо получал на вопрос программирования. Спасибо!
Лан

12
У меня также есть существующие модели, и я создаю rails generate scaffold_controller MyModelслой представления, но он не включает атрибуты модели (столбцы таблицы), и вы должны добавить их вручную. Кто-нибудь знает, как это исправить? Я на Rails 3.2.8.
aaronbartell

@aaronbartell Вы просите Rails сгенерировать scaffold_controller, который не заботится об атрибутах модели. Это не нарушается, если вы хотите, чтобы модель тоже генерировалась, тогда вы хотите, generate scaffoldесли у вас есть модель, но вы хотите, чтобы контроллер скаффолда и новые атрибуты были добавлены в нужную модель, scaffold_generatorа затем migrationполя, которые вы изменяете
Lee Jarvis

9
@Lee - Ни один aaronbartell не спрашивает, почему scaffold_controller не генерирует соответствующие входные данные представления для существующих атрибутов модели, которая была ему передана, что является правильным вопросом ... stackoverflow.com/q/17153864/165673
Ярин

67

Отличный ответ Lee Jarvis, это просто команда, например; у нас уже есть существующая модель под названием User:

rails g scaffold_controller User

10
Спасибо, тем из нас, кому лень читать абзацы текста!
Крис Cirefice

30

Для тех, кто запускает приложение rails с существующей базой данных, есть классный гем, призванный schema_to_scaffoldсгенерировать скрипт scaffold. это выводит:

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

от вашего schema.rbнашего вашего переименованного schema.rb. Проверьте это


2
Это отличный маленький драгоценный камень, он мне очень поможет! Должен быть встроен в Rails!
Питер Андерссон

13

В Rails 5 вы все еще можете запустить

$rails generate scaffold movie --skip

создать все недостающие файлы скаффолдов или

rails generate scaffold_controller Movie

создать контроллер и просматривать только.

Для лучшего объяснения проверьте рельсы эшафот



10

Вы можете использовать scaffold_controllerи не забудьте передать attributesмодель, иначе скаффолд будет создан без атрибутов.

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

Эта команда сгенерирует следующие файлы:

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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.