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

299

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

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

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

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

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

  • 1
    Вероятно, лучше всего написать свои собственные контроллеры и представления и маршруты. Вы узнаете больше о понятиях
  • 1
    Согласитесь с @ penne12. По крайней мере, в начале, пока вы не освоитесь с концепциями, чтобы вы знали, что весь код делает для вас.
Показать ещё 2 комментария
Теги:
ruby-on-rails-3

5 ответов

522
Лучший ответ

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/имя_контроллера'.

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

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

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

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

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

rails g scaffold_controller User
  • 6
    Спасибо, тем из нас, кому лень читать абзацы текста!
26

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

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

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

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

Эта команда должна выполнить трюк:

$ rails g scaffold movie --skip
5

Вы можете использовать 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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню