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


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.