ChatGPT解决这个技术问题 Extra ChatGPT

Generate a controller with all the RESTful functions

I am trying to generate a controller with all the RESTful actions stubbed. I had read at Wikibooks - Ruby on Rails that all I needed to do was to call the generator with the controller name and I would get just that. So, I ran script/generate rspec_controller Properties but got an empty controller.

Any other suggestions would be greatly appreciated.

thenduks, If I was as experienced as you that would be true, but I don't even know the 7 restful actions off the top of my head so I would have to google the item and then switch back and forth between the page and my app to enter each one. Once I know them, I agree that your solution is easier

M
Magne

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

Great Answer. Experts can ignore the rest. Note to noobs - if you name your controller PropertyController as I misunderstood :) you will get PropertyController Controller :)
My answer does exactly the same thing - except you don't need to specify all of the default 7 actions.
Just a note... this only generates a controller with methods named for basic CRUD actions. The routes are far from RESTful... e.g. route get "mycontroller/create" (create should be a post)
I would agree that this answer is more suited for generic custom actions, it does not actually respect the RESTful convention which is desired.
This answer is outdated for rails 4. See konung's answer for Rails 4.
g
gdelfino

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


I prefer this method as it generates RESTful routes. Using rails g controller Foos create would generate a route for get '/create' which is not RESTful at all.
C
Community

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


can you script/generate rspec_scaffold controller Properties?
yes you could. Here is detailed info/tutorial: blog.davidchelimsky.net/2007/05/14/…
I suspect this answer is outdated for recent versions of Rails. It will simply create an entire scaffold for the object/model called "controller"
Yes that was written in 2010 for version 2.something as is follows from question. Now (Rails 4) it would look like this: rails g scaffold_controller Property ( scaffold_controller would invoke scaffolding and you need provide model name ( singular), but don't have to)
I can verify that rails g scaffold_controller Property works in rails 3.2 as well. This will create a PropertiesController with ALL 7 default RESTful actions and their respective views, without a model.
p
pmargreff

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.


C
Community

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

m
molf

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.


@Barb, I think Scaffolding would be better for you since it not only declares all functions but it also defines them. It is good to create them at least once and have them as an example.
T
Tom Hammond

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 :).


And for controllers with a longer name (like line_items), rails g controller LineItems
You can just use rails g scaffold_controller apps in Rails 4
s
stephenmurdoch

script/generate rspec_scaffold Property


and yes, I realise that you have already accepted an answer on this one, but I feel this solution might help some people who read this post out too.... the solution above will create a model etc, which you can just delete if you don't need
r
rfunduk

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

Great answer, I think you are missing an action are there not 7 actions?
p
philippinedev

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

Create a new file, say, railsgcontroller Make it executable and save it on path 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

关注公众号,不定期副业成功案例分享
Follow WeChat

Success story sharing

Want to stay one step ahead of the latest teleworks?

Subscribe Now