Создайте контроллер со всеми функциями 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
Отличный ответ. Остальное эксперты могут игнорировать. Примечание для новичков - если вы назовете свой контроллер PropertyController, как я неправильно понял :), вы получите PropertyController Controller :)
Барб

2
Мой ответ делает то же самое, за исключением того, что вам не нужно указывать все 7 действий по умолчанию.
konung

4
Просто примечание ... это только генерирует контроллер с методами, названными для основных действий CRUD. Маршруты далеки от RESTful ... например route get "mycontroller/create"(создать должно быть сообщение)
rthbound

Я согласен с тем, что этот ответ больше подходит для общих настраиваемых действий, он фактически не соблюдает желаемое соглашение RESTful.
prusswan 08

Этот ответ устарел для rails 4. См. Ответ
konung

97

В Rails 3 тоже есть rails generate scaffold_controller .... Больше информации здесь .


1
Я предпочитаю этот метод, поскольку он генерирует маршруты RESTful. Использование rails g controller Foos createприведет к созданию маршрута, для get '/create'которого вообще не является RESTful.
rthbound

37

РЕДАКТИРОВАТЬ (из-за некоторых комментариев) : исходный вопрос был в 2010 году - следовательно, ответ НЕ для RAILS 4, а для рельсов 2 !!

попробуйте использовать строительные леса.

script/generate scaffold controller Properties

Раздел официальной документации по Ruby On Rails

Я уверен, что вы можете найти больше информации, если выполните поиск в Google по рельсам. Надеюсь, это поможет.

РЕДАКТИРОВАТЬ: для 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работает и в rails 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, я думаю, что Scaffolding будет лучше для вас, поскольку он не только объявляет все функции, но и определяет их. Хорошо хотя бы один раз создать их и иметь в качестве примера.
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

1
Вы можете просто использовать rails g scaffold_controller appsв Rails 4
wrdevos

2

скрипт / сгенерировать свойство rspec_scaffold


и да, я понимаю, что вы уже приняли ответ на этот вопрос, но я чувствую, что это решение может помочь некоторым людям, которые тоже читают этот пост .... приведенное выше решение создаст модель и т. д., которую вы можете просто удалить, если вам не нужно
Стивенмердок

0

Нет никакого способа (о котором я знаю? Который задокументирован?) Отключить контроллер, кроме как через строительные леса. Но вы могли:

script/generate controller WhateverController new create edit update destroy show

Отличный ответ, я думаю, вам не хватает действия, разве нет 7 действий?
Барб

0

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


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

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.