Як запустити `рейки генерувати риштування ', коли модель вже існує?


332

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

Однією з перших речей, які я створив, була модель "Кіно". Потім я почав визначати це детальніше, додав кілька методів тощо.

Тепер я розумію, що я повинен був створити це, rails generate scaffoldщоб з'єднати такі речі, як маршрутизація, представлення даних, контролер тощо.

Я спробував генерувати ліси, але у мене з’явилася помилка сказати, що файл міграції з таким же ім’ям вже існує.

Який найкращий спосіб для мене зараз створити риштування для свого "Фільму"? (за допомогою рейок 3)


1
Напевно, найкраще писати власні контролери, перегляди та маршрути. Ви дізнаєтесь більше про поняття
— Бен Аубін

1
Погодьтеся з @ penne12. Принаймні на початку, поки вам не сподобаються ці поняття, щоб ви знали, що робить весь код, який створюється для вас.
— mydoghasworms

Не має безпосереднього значення, але якщо ви колись зіпсуєте, використовуйте рейки знищуйте <etc>. Пам'ятаю, це було дуже корисно, коли я починав.
— Хелсінг

1
@BenAubin, хоча правда, краса Рейлів полягає в тому, що не потрібно постійно писати котельню.
— Romuloux

Відповіді:


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, так і недооцінене, а аргументи список переглядів. Ім’я контролера отримується у вигляді множинного варіанту імені моделі.

Щоб створити контролер всередині модуля, вкажіть назву моделі як шлях, наприклад "батьківський модуль / ім'я контролера".

Це генерує клас контролерів у додатках / контролерах та викликає помічників, генераторів шаблонів та генераторів тестових рамок.

Щоб створити свій ресурс, ви використовували б resourceгенератор, а для створення міграції ви також можете бачити migrationгенератор (див., У цьому цьому божевіллі є зразок). Вони надають варіанти для створення відсутніх файлів для створення ресурсу. Крім того, ви можете просто запустити rails generate scaffoldз --skipможливістю пропустити всі наявні файли :)

Рекомендую витратити трохи часу на перегляд варіантів генераторів. Це те, що я не відчуваю, дуже добре зафіксоване в книгах і подібних, але вони дуже зручні.


12
Ух, одна з найкращих відповідей, яку я коли-небудь потрапляв на питання програмування. Дякую!
— Лан

12
У мене також є існуючі моделі, і rails generate scaffold_controller MyModelвони генерують шар перегляду, але він не включає атрибути моделі (стовпці таблиці), і ви повинні додавати їх вручну. Хтось знає виправлення для цього? Я на рейках 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
Дякую, тим, хто з нас занадто лінивий читати абзаци тексту!
— Кріс Сірефіс

30

Для тих, хто запускає рейкову програму з існуючою базою даних, є класний дорогоцінний камінь, який викликається schema_to_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.