生成具有所有 RESTful 函数的控制器

我正在尝试生成一个所有 RESTful 操作都被截断的控制器。我在 Wikibooks-Ruby on Rails上读到,我所需要做的就是用控制器名称调用生成器,我就会得到这个结果。所以,我运行 script/generate rspec_controller Properties,但得到一个空控制器。

如有其他建议,我们将不胜感激。

99789 次浏览

EDIT(due to some comments) : Original question was in 2010 - hence the answer is NOT for RAILS 4 , but for rails 2!!

try using scaffolding.

script/generate scaffold controller Properties

Section of Official docs on Ruby On Rails

I'm sure you can find more info if you do a google search on rails scaffolding. Hope that helps.

EDIT: For RAILS 4

rails g scaffold_controller Property

There's no way (that I know of? that is documented?) to stub out a controller except through scaffolding. But you could do:

script/generate controller WhateverController new create edit update destroy show

You're looking for scaffolding.

Try:

script/generate scaffold Property

This will give you a controller, a model, a migration and related tests. You can skip the migration with the option --skip-migration. If you don't want the others, you'll have to delete them yourself. Don't worry about overwriting existing files, that won't happen unless you use --force.

As klew points out in the comments, this also defines the method bodies for you, not just the names. It is very helpful to use as a starting point for your REST controller.

I don't know about an automated way of doing it, but if you do:

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

All of them will be created for you

Update for Rails 4

rails g scaffold_controller Property

script/generate rspec_scaffold Property

In Rails 3 there is also rails generate scaffold_controller .... More info here.

In Rails 4 it's rails g controller apps new create update edit destroy show index

Or rails generate controller apps new create update edit destroy show index if you want to write out the full term :).

One solution is to create a script that accepts one parameter, the controller name, and let the script type the whole command for you.


  1. Create a new file, say, railsgcontroller
  2. Make it executable and save it on path
  3. Run it like: $ 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

In Rails 4/5 the following command does the trick for me.

rails g scaffold_controller Property --skip-template-engine

It generated the controller actions but not the view.

Rails 5.1

Starting point:

You have created a model without a controller, nor views (eg thru: rails generate model category)

Objective:

Upgrade it to a full RESTful resource

Command:

rails generate scaffold_controller category

It stubs out a scaffolded controller, its seven RESTful actions and related views. (Note: You can either pass the model name CamelCased or under_scored.)

Output:

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