Створіть контролер з усіма функціями RESTful


86

Я намагаюся згенерувати контролер із усіма RESTful діями, що заглушені. Я читав у Wikibooks - Ruby on Rails, що все, що мені потрібно було зробити, це зателефонувати генератору з іменем контролера, і я отримаю саме це. Отже, я побіг, script/generate rspec_controller Propertiesале отримав порожній контролер.

Будемо вдячні за будь-які інші пропозиції.


1
thenduks, Якби я був таким же досвідченим, як ти, це було б правдою, але я навіть не знаю 7 спокійних дій, що проходять з моєї голови, тому мені довелося б погуглити елемент, а потім переключатися між сторінкою та моїм додаток для введення кожного. Як тільки я їх знаю, я погоджуюсь, що ваше рішення простіше
Барб

Відповіді:


143

Я не знаю про автоматизований спосіб зробити це, але якщо ви знаєте:

script/generate controller your_model_name_in_plural new create update edit destroy index show

Усі вони будуть створені для вас

Оновлення для Rails 4

rails g scaffold_controller Property

7
Чудова відповідь. Експерти можуть проігнорувати решту. Примітка для noobs - якщо ви назвете свій контролер PropertyController, як я неправильно зрозумів :), ви отримаєте PropertyController Controller :)
Barb

2
Моя відповідь робить точно те ж саме - крім того, що вам не потрібно вказувати всі 7 дій за замовчуванням.
konung

4
Тільки примітка ... це лише генерує контролер із методами, названими для основних дій CRUD. Маршрути далекі від RESTful ... наприклад route get "mycontroller/create"(створити має бути допис)
rthbound

Я б погодився, що ця відповідь більше підходить для загальних користувацьких дій, вона насправді не відповідає бажаній умові RESTful.
prusswan

Ця відповідь застаріла для рейок 4. Див. Відповідь
konung

97

У Rails 3 також є rails generate scaffold_controller .... Більше інформації тут .


1
Я віддаю перевагу цьому методу, оскільки він генерує RESTful маршрути. Використання rails g controller Foos createгенерує маршрут, для get '/create'якого зовсім не RESTful.
rthbound

37

EDIT (завдяки деяким коментарям) : Оригінальне запитання було в 2010 році - отже, відповідь НЕ на RAILS 4, а на Rails 2 !!

спробуйте використовувати риштування.

script/generate scaffold controller Properties

Розділ офіційних документів про Ruby On Rails

Я впевнений, що ви зможете знайти більше інформації, якщо здійсните пошук у Google на будівельних риштуваннях. Сподіваюся, це допомагає.

EDIT: для RAILS 4

rails g scaffold_controller Property


Ви можете створити сценарій / згенерувати властивості контролера rspec_scaffold?
Барб

так ви могли б. Тут зібрана докладна інформація / підручник: blog.davidchelimsky.net/2007/05/14 / ...
конунг

Підозрюю, що ця відповідь застаріла для останніх версій Rails. Це просто створить цілий риштування для об'єкта / моделі, що називається "контролер"
prusswan

4
Так, це було написано в 2010 році для версії 2. щось таке, як випливає із запитання. Тепер (Rails 4) це буде виглядати так: rails g scaffold_controller Властивість (scaffold_controller буде викликати риштування, і вам потрібно вказати назву моделі (в однині), але не потрібно)
konung

2
Я можу перевірити, що це rails g scaffold_controller Propertyпрацює і в рейках 3.2. Це створить PropertiesController з усіма 7 типовими RESTful діями та їх відповідними поданнями без моделі.
mkralla11

15

У Rails 4/5 наступна команда робить для мене фокус.

rails g scaffold_controller Property --skip-template-engine

Він генерував дії контролера, але не подання.


9

Рейки 5.1

Відправна точка:

Ви створили модель без контролера, ні погляди (наприклад , через: rails generate model category)

Завдання:

Оновіть його до повного ресурсу RESTful

Команда:

rails generate scaffold_controller category

Він видаляє контрольний ліфт, його сім RESTful дій та відповідні погляди. (Примітка: Ви можете передати назву моделі CamelCased або under_scored.)

Вихід:

varus@septimusSrv16DEV4:~/railsapps/dblirish$ rails generate scaffold_controller category
Running via Spring preloader in process 45681
      create  app/controllers/categories_controller.rb
      invoke  erb
      create    app/views/categories
      create    app/views/categories/index.html.erb
      create    app/views/categories/edit.html.erb
      create    app/views/categories/show.html.erb
      create    app/views/categories/new.html.erb
      create    app/views/categories/_form.html.erb
      invoke  test_unit
      create    test/controllers/categories_controller_test.rb
      invoke  helper
      create    app/helpers/categories_helper.rb
      invoke    test_unit
      invoke  jbuilder
      create    app/views/categories/index.json.jbuilder
      create    app/views/categories/show.json.jbuilder
      create    app/views/categories/_category.json.jbuilder

7

Ви шукаєте риштування.

Спробуйте:

script/generate scaffold Property

Це дасть вам контролер, модель, міграцію та відповідні тести. Ви можете пропустити міграцію за допомогою опції --skip-migration. Якщо ви не хочете інших, вам доведеться їх видалити самостійно. Не турбуйтеся про перезапис існуючих файлів, що не відбудеться, якщо ви не використовуєте --force.

Як зазначає klew у коментарях, це також визначає тіло методів для вас, а не лише імена. Це дуже корисно використовувати як вихідну точку для вашого контролера REST.


@Barb, я думаю, що ліси були б для вас кращими, оскільки вони не лише декларують всі функції, але й визначають їх. Добре створити їх хоча б раз і взяти за приклад.
klew

6

У Rails 4 це rails g controller apps new create update edit destroy show index

Або rails generate controller apps new create update edit destroy show indexякщо ви хочете виписати повний термін :).


А для контролерів з довшою назвою (наприклад, line_items), rails g controller LineItems
Tommyixi 20.03.15

1
Ви можете просто використовувати rails g scaffold_controller appsRails 4
wrdevos

2

script / згенерувати властивість rspec_scaffold


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

0

Немає способу (про який я знаю? Що задокументовано?) Заглушити контролер, за винятком будівельних лісів. Але ви можете зробити:

script/generate controller WhateverController new create edit update destroy show

Чудова відповідь, я думаю, вам не вистачає дії, чи немає 7 дій?
Барб

0

Одним із рішень є створення сценарію, який приймає один параметр, ім’я контролера, і дозволить сценарію ввести цілу команду для вас.


  1. Створіть новий файл, скажімо, railsgcontroller
  2. Зробіть його виконуваним і збережіть на шляху
  3. Запустіть це так: $ railsgcontroller Articles

die () {
    echo "Please supply new rails controller name to generate."
    echo >&2 "$@"
    exit 1
}

[ "$#" -eq 1 ] || die "1 argument required, $# provided"

rails g controller "$1" new create update edit destroy show index
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.